gpt4 book ai didi

c# - 命令评估依赖属性绑定(bind)?

转载 作者:可可西里 更新时间:2023-11-01 08:39:50 24 4
gpt4 key购买 nike

是什么决定了同一控件上多个 DepdencyProperties 的求值顺序?

我正在使用 Extended WPF Toolkit PropertyGrid 并同时绑定(bind) SelectedObject 和 PropertyDefinitions:

<extToolkit:PropertyGrid AutoGenerateProperties="False" SelectedObject="{Binding ActiveDataPoint}" PropertyDefinitions="{Binding ActiveDataPoint.Properties}">

问题是 OnSelectedObjectChanged 从依赖属性触发,并且在那个更改的处理程序中它引用 PropertyDefinitions,它被视为 null。如果我注释掉 OnSelectedObjectChanged 处理程序,那么我可以在调试时看到在调用 OnSelectedObjectChanged 之后调用了 OnPropertyDefinitionsChanged。

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 以便它适用于任一订单?

最佳答案

还有一个反例来证实已经说过的话

...to never rely on the order of properties being applied

在具有定义的 DependencyProperty 的自定义 UserControl 中(.NET 4.5 等)- 因为 PropertyChangedCallbacks 在初始化时被调用...

实际顺序由“code behind definitions”(静态字段)的顺序决定

...我猜这与注册顺序有关。

在其他一些情况下,顺序取决于属性在 XAML 中的排列方式。

关于c# - 命令评估依赖属性绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9744366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com