• WPF DependencyProperty和INotifyPropertyChanged


    DependencyProperty

    使用依赖项属性时,在具有视觉外观(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);
        }
    }
    

    System.ComponentModel.INotifyPropertyChanged

    通常,在创建数据对象时,将使用这种方法。 这是一种简单而整洁的解决方案,适用于类似数据的内容。
    使用时,只需实现一个事件(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")); 
        } 
    } 
    

    PropertyNameChanged

    为具有指定名称(例如NameChanged)的每个属性引发一个事件。 活动必须使用此名称,与INotifyPropertyChanged类似的方法。

    GetBindingExpression()

    使用FrameworkElement.GetBindingExpression(),可以获取BindingExpression对象,并调用BindingExpression.UpdateTarget()进行刷新。

    参考资料

    When to use a WPF Dependency Property versus INotifyPropertyChanged

  • 相关阅读:
    启动Tomcat报错:严重: Exception starting filter struts2 java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
    数学 交换律
    android中LayoutInflater的使用
    数学 三角函数
    数学 矩阵
    数学 弧度
    数学 分配律
    Android开发必备的免费资源和工具
    数学 结合律
    View.setTag()的作用
  • 原文地址:https://www.cnblogs.com/Lulus/p/12499891.html
Copyright © 2020-2023  润新知