依赖项属性默认值不被过度



我正在尝试覆盖依赖项属性的价值,但似乎行不通。

在我的XAML代码中,我有一个按钮,上面有以下命令参数:

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"));
}

然后在这里,我尝试在覆盖之后获取该值以使用它。当我按按钮时,请打电话给onmyCommandExectuced。OBJ的价值为"默认"

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参数,或通过相似的参数 实例化。试图在实例之后更改元数据 所有者类型的存在不会引起例外,但会导致 属性系统中的行为不一致。

来自depentencyProperty.overridemetadata

public static MyAdvancedStateControl()
{
    MyStateControl.StateProperty.OverrideMetadata(typeof(MyStateControl), new PropertyMetadata("Successfully overriden"));
}

最新更新