【发布时间】:2019-07-26 16:10:41
【问题描述】:
我正在尝试覆盖依赖属性的值,但它似乎不起作用。
在我的 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 轻松更改? 谢谢
【问题讨论】:
-
不清楚您要做什么。您的
MyStateControl定义了一个依赖属性,并且您将CommandParameter设置为该属性的值。MyAdvancedStateControl应该如何参与其中? -
那么 MyAdvancedStateControl 和 MyStateControl 之间有什么关系呢?它们是如何相互关联的?命令定义在哪里=
-
MyAdvancedStateControl是ViewModel,里面定义了命令
-
那么你应该在视图模型中将State定义为CLR属性...
标签: c# wpf data-binding wpf-controls dependency-properties