加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 01:07:20 所属栏目:百科 来源:网络整理
导读:人们有什么指导,当一个简单的.NET属性触发INotifyPropertyChanged.PropertyChanged在视图模型中是否足够?然后什么时候你想移动到一个完全成熟的依赖属性?还是DP主要用于查看? 有几种方法: 依赖属性 在使用依赖属性时,它在元素 – 具有可视外观的类(UIE
人们有什么指导,当一个简单的.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数据。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读