Что определяет порядок вычисления нескольких DepdencyProperties одного и того же элемента управления?
Я использую расширенный набор инструментов WPF 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 );
}
Проблема, с которой я столкнулась, обсуждается на этой теме форума, но я задаю более общий вопрос WPF о том, как я могу изменить порядок обновления этих свойств.
Я попытался иметь несколько вызовов NotifyPropertyChanged в разных порядках, но это, похоже, не влияет на это. Могу ли я заставить порядок отличаться или я должен просто изменить PropertyGrid, чтобы он работал для любого заказа?