c# - 未覆盖依赖属性默认值
问题描述
我正在尝试覆盖依赖属性的值,但它似乎不起作用。
在我的 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 轻松更改?谢谢
解决方案
制作MyAdvancedStateControl
static
.
在属性系统使用依赖属性之前,应该覆盖依赖属性元数据。这相当于使用注册依赖属性的类创建特定实例的时间。对 OverrideMetadata 的调用只能在提供自身作为此方法的 forType 参数的类型的静态构造函数中执行,或者通过类似的实例化执行。在所有者类型的实例存在后尝试更改元数据不会引发异常,但会导致属性系统中的行为不一致。
来自DependencyProperty.OverrideMetadata
public static MyAdvancedStateControl()
{
MyStateControl.StateProperty.OverrideMetadata(typeof(MyStateControl), new PropertyMetadata("Successfully overriden"));
}
推荐阅读
- reactjs - 使用下拉列表中的选定值显示更改时正确的组件?
- machine-learning - CreateML 活动分类器连续预测
- python - 在 UDP 客户端上显式设置端口号
- go - 在基于通道的管道中使用上下文超时
- javascript - Google Drive Api 中的 Acess_token 为空
- python - Python 元组真的需要订购吗?
- angular - 列表和表格之间的primeng拖放
- javascript - Highcharts.pathToArray 不是函数
- recursion - 在向量中存储树的前序遍历
- java - 无法让词法分析器在我的 Java 程序中工作