何时使用WPF依赖关系属性与INotifyPropertyChanged
人们有什么指导,当一个简单的.NET属性触发INotifyPropertyChanged.PropertyChanged在视图模型中是否足够?然后什么时候你想移动到一个完全成熟的依赖属性?还是DP主要用于查看?
有几种方法:
依赖属性 在使用依赖属性时,它在元素 – 具有可视外观的类(UIElements)中最有意义。 优点: > WPF为你做逻辑的东西 缺点: >您需要派生表单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对象 第一和第二是最有可能取决于你的目标是什么。 总而言之,它是视觉vs数据。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |