何时使用WPF依赖关系属性与INotifyPropertyChanged

人们有什么指导,当一个简单的.NET属性触发INotifyPropertyChanged.PropertyChanged在视图模型中是否足够?然后什么时候你想移动到一个完全成熟的依赖属性?还是DP主要用于查看?
有几种方法

依赖属性

在使用依赖属性时,它在元素 – 具有可视外观的类(UIElements)中最有意义。

优点:

> WPF为你做逻辑的东西
>一些机制像动画使用依赖属性
>’Fits’viewmodel样式

缺点:

>您需要派生表单DependencyObject
>有点尴尬的简单的东西

样品:

public static class StoryBoardHelper
{
    public static DependencyObject GetTarget(Timeline timeline)
    {
        if (timeline == null)
            throw new ArgumentNullException("timeline");

        return timeline.GetValue(TargetProperty) as DependencyObject;
    }

    public static void SetTarget(Timeline timeline,DependencyObject value)
    {
        if (timeline == null)
            throw new ArgumentNullException("timeline");

        timeline.SetValue(TargetProperty,value);
    }

    public static readonly DependencyProperty TargetProperty =
            DependencyProperty.Registerattached(
                    "Target",typeof(DependencyObject),typeof(Timeline),new PropertyMetadata(null,OnTargetPropertyChanged));

    private static void OnTargetPropertyChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
    {
        Storyboard.SetTarget(d as Timeline,e.NewValue as DependencyObject);
    }
}

2. System.ComponentModel.INotifyPropertyChanged

通常,在创建数据对象时,您将使用此方法。它是简单和整洁的解决方案为类数据的东西。

优点和缺点 – 互补1.您只需要实现一个事件(PropertyChanged)。

样品:

public class Student : INotifyPropertyChanged 
{ 
   public event PropertyChangedEventHandler PropertyChanged; 
   public void OnPropertyChanged(PropertyChangedEventArgs e) 
   { 
       if (PropertyChanged != null) 
          PropertyChanged(this,e); 
   } 
}

private string name; 
public string Name; 
{ 
    get { return name; } 
    set { 
           name = value; 
           OnPropertyChanged(new PropertyChangedEventArgs("Name")); 
        } 
}

3.PropertyNameChanged

为具有指定名称的每个属性升级事件(f.e。NameChanged)。事件必须有这个名字,它是由你来处理/提升他们。类似的方法2。

4.获取绑定

使用FrameworkElement.GetBindingExpression()可以获得BindingExpression对象
调用BindingExpression.UpdateTarget()来刷新。

第一和第二是最有可能取决于你的目标是什么。

总而言之,它是视觉vs数据。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...