【发布时间】:2012-03-16 20:52:18
【问题描述】:
是什么决定了同一控件上的多个 DepdencyProperties 的求值顺序?
我正在使用Extended WPF Toolkit PropertyGrid 并绑定了 SelectedObject 和 PropertyDefinitions:
<extToolkit:PropertyGrid AutoGenerateProperties="False" SelectedObject="{Binding ActiveDataPoint}" PropertyDefinitions="{Binding ActiveDataPoint.Properties}">
问题是 OnSelectedObjectChanged 从依赖属性触发,并且在该更改的处理程序中它引用 PropertyDefinitions,它被视为 null。如果我注释掉 OnSelectedObjectChanged 处理程序,那么我可以在调试时看到 OnPropertyDefinitionsChanged 在调用 OnSelectedObjectChanged 之后被调用。
public static readonly DependencyProperty PropertyDefinitionsProperty = DependencyProperty.Register( "PropertyDefinitions", typeof( PropertyDefinitionCollection ), typeof( PropertyGrid ), new UIPropertyMetadata( null, OnPropertyDefinitionsChanged ) );
public PropertyDefinitionCollection PropertyDefinitions
{
get
{
return ( PropertyDefinitionCollection )GetValue( PropertyDefinitionsProperty );
}
set
{
SetValue( PropertyDefinitionsProperty, value );
}
}
private static void OnPropertyDefinitionsChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
Console.Write("I changed!");
}
public static readonly DependencyProperty SelectedObjectProperty = DependencyProperty.Register( "SelectedObject", typeof( object ), typeof( PropertyGrid ), new UIPropertyMetadata( null, OnSelectedObjectChanged ) );
public object SelectedObject
{
get
{
return ( object )GetValue( SelectedObjectProperty );
}
set
{
SetValue( SelectedObjectProperty, value );
}
}
private static void OnSelectedObjectChanged( DependencyObject o, DependencyPropertyChangedEventArgs e )
{
PropertyGrid propertyInspector = o as PropertyGrid;
if( propertyInspector != null )
propertyInspector.OnSelectedObjectChanged( ( object )e.OldValue, ( object )e.NewValue );
}
this forum thread 讨论了我面临的问题,但我问的是一个更一般的 WPF 问题,即如何更改这些属性的更新顺序。
我曾尝试以不同的顺序多次调用 NotifyPropertyChanged,但这似乎并不影响这一点。我可以使订单不同,还是应该只修改 PropertyGrid 以使其适用于任一订单?
【问题讨论】:
标签: c# wpf xaml dependency-properties wpftoolkit