Che cosa determina l'ordine in cui vengono valutati più DepDencyProperties sullo stesso controllo?Ordinare che i collegamenti DependencyProperties siano valutati?
Sto usando il Extended WPF Toolkit PropertyGrid e hanno entrambi SelectedObject e PropertyDefinitions vincolati:
<extToolkit:PropertyGrid AutoGenerateProperties="False" SelectedObject="{Binding ActiveDataPoint}" PropertyDefinitions="{Binding ActiveDataPoint.Properties}">
Il problema è che i fuochi OnSelectedObjectChanged dalla proprietà di dipendenza, e in quel cambiato gestore si fa riferimento PropertyDefinitions, che è vedere come null. Se commento il gestore OnSelectedObjectChanged, posso vedere quando il debugging di OnPropertyDefinitionsChanged viene chiamato DOPO la chiamata a 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);
}
Il problema che sto affrontando è discusso su this forum thread, ma sto chiedendo una più generale questione WPF di come posso cambiare l'ordine in cui queste proprietà vengono aggiornate.
Ho provato ad avere più chiamate a NotifyPropertyChanged in ordini diversi ma questo non sembra influenzare questo. Posso fare in modo che l'ordine sia diverso o devo semplicemente modificare il PropertyGrid in modo che funzioni per entrambi gli ordini?