【问题标题】:What's the point in setting up dependency properties, when PropertyChangedEventHandler does the job?当 PropertyChangedEventHandler 完成这项工作时,设置依赖属性有什么意义?
【发布时间】:2009-09-07 11:05:33
【问题描述】:

目前,我已使用以下方法对我在 xaml 中绑定的任何属性设置更改通知:

    class MyClass : INotifyPropertyChanged
{
    string name;

    public string Name
    {
        get { return name; }
        set
        {
            name = value;
            NotifyPropertyChanged("Name");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

但是,我已经看到要实现依赖属性,我需要做一些事情,比如注册它和设置回调等,而这反过来又会调用上面的代码。

那么当我可以使用上述方法时,为依赖属性设置所有额外的样板文件有什么意义呢?

谢谢。

【问题讨论】:

    标签: wpf xaml dependency-properties


    【解决方案1】:

    依赖属性可以是绑定的目标,而常规 CLR 属性不能。这就是为什么控件的属性(绑定目标)通常是依赖属性,而模型或 ViewModel 类(绑定源)的属性不是。

    【讨论】:

    • 我想我现在明白了。那么它们是仅用于自定义用户控件还是可以在其他任何地方使用?谢谢
    • 你可以在任何继承自DependencyObject的类中使用它们,不管它是否是一个控件。您还可以在任何类中创建 attached 依赖属性,即使它不是从 DependencyObject 继承的。这通常用于扩展现有控件的行为而不诉诸继承。
    【解决方案2】:

    您所做的是正确的(假设我理解正确)依赖属性不适用于您在模型中绑定的内容,它们适用于模型将绑定到的控件中的属性 - 例如 Text 中的属性一个文本框。

    在您的自定义控件中使用它们有很多原因,其中最重要的是它们附带的自动管道,以便它们正确绑定到您的示例中声明的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多