依赖属性默认值未被覆盖

问题描述 投票:1回答:1

我试图覆盖依赖属性的值,但它似乎没有工作。

在我的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轻松更改?谢谢

c# wpf data-binding wpf-controls dependency-properties
1个回答
0
投票

制作MyAdvancedStateControl static的构造函数。

在属性系统使用依赖项属性之前,应覆盖依赖项属性元数据。这相当于使用注册依赖项属性的类创建特定实例的时间。对OverrideMetadata的调用应仅在提供自身的类型的静态构造函数中执行,作为此方法的forType参数,或通过类似的实例化。在存在所有者类型的实例后尝试更改元数据不会引发异常,但会导致属性系统中的行为不一致。

来自DependencyProperty.OverrideMetadata

public static MyAdvancedStateControl()
{
    MyStateControl.StateProperty.OverrideMetadata(typeof(MyStateControl), new PropertyMetadata("Successfully overriden"));
}
© www.soinside.com 2019 - 2024. All rights reserved.