我正在尝试覆盖依赖项属性的值,但是它似乎不起作用。
在我的Xaml代码中,我有一个带有以下CommandParameter的按钮:
CommandParameter="{Binding State,Mode=OneWay}
在这里,我声明了我的依赖属性:
public class MyStateControl : UserControl
{
public MyStateControl()
{
this.InitializeComponent();
}
public string State
{
get { return (string)this.GetValue(StateProperty); }
set { this.SetValue(StateProperty, value); }
}
public static readonly DependencyProperty StateProperty = DependencyProperty.Register(
"State", typeof(string), typeof(MyStateControl),new PropertyMetadata("DEFAULT"));
}
,然后在这里我尝试在覆盖它之后获取该值以使用它。 当我按下按钮时,onMyCommandExecuted被调用。且obj的值为“ DEFAULT”
public class MyAdvancedStateControl : INotifyPropertyChanged
{
public MyAdvancedStateControl()
{
MyStateControl.StateProperty.OverrideMetadata(typeof(MyAdvancedStateControl), new PropertyMetadata("Successfully overriden"));
}
private void onMyCommandExecuted(object obj)
{
//TODO
}
}
我做错什么了吗?如果是这样,重写依赖项属性值的最佳方法是什么? 是否可以/可能最好将默认值设置为一个变量,然后可以从MyAdvancedStateControl轻松更改该变量? 谢谢
答案 0 :(得分:1)
制作MyAdvancedStateControl
static
的构造函数。
从属属性元数据应在属性之前覆盖 系统使用依赖项属性。这等于时间 使用注册该类的类创建特定实例 依赖项属性。 仅应调用OverrideMetadata 在提供该类型的静态构造函数中执行 本身作为此方法的forType参数,或通过类似方法 实例化。尝试在实例之后更改元数据 所有者类型存在不会引发异常,但会导致 财产制度中的行为不一致。
来自DependencyProperty.OverrideMetadata
public static MyAdvancedStateControl()
{
MyStateControl.StateProperty.OverrideMetadata(typeof(MyAdvancedStateControl), new PropertyMetadata("Successfully overriden"));
}