Qu'est-ce qui détermine l'ordre dans lequel plusieurs propriétés DepdencyProperties sur le même contrôle sont évaluées?Ordonner que les liaisons DependencyProperties sont évaluées?
J'utilise le Extended WPF Toolkit PropertyGrid et qui ont à la fois selectedObject et PropertyDefinitions lié:
<extToolkit:PropertyGrid AutoGenerateProperties="False" SelectedObject="{Binding ActiveDataPoint}" PropertyDefinitions="{Binding ActiveDataPoint.Properties}">
Le problème est que les feux OnSelectedObjectChanged de la propriété de dépendance, et ce gestionnaire a changé fait référence PropertyDefinitions, qui est voyant comme nul. Si je commente le gestionnaire OnSelectedObjectChanged, je peux voir lors du débogage que OnPropertyDefinitionsChanged est appelé APRES l'appel à 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);
}
Le problème que je suis confronté est discuté sur this forum thread, mais je pose une question plus générale WPF de la façon dont je peux changer l'ordre que ces propriétés sont mises à jour.
J'ai essayé d'avoir plusieurs appels à NotifyPropertyChanged dans différents ordres mais cela ne semble pas affecter cela. Puis-je faire en sorte que la commande soit différente ou devrais-je simplement modifier le PropertyGrid pour qu'il fonctionne pour l'une ou l'autre commande?