【问题标题】:Dependency property default value not being overriden未覆盖依赖属性默认值
【发布时间】: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


【解决方案1】:

制作MyAdvancedStateControlstatic的构造函数。

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

来自DependencyProperty.OverrideMetadata

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2011-12-01
    • 1970-01-01
    • 2015-05-23
    • 2011-01-03
    • 1970-01-01
    相关资源
    最近更新 更多