zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Kerberos-KDC
    samba后台进程及安全模式简介
    samba服务器详细配置(非域模式)
    windows常用net use命令
    samba常用命令
    ORA-24324、ORA-12560、ORA-12514
    oracle的启动和关闭
    Oracle 监听配置详解(转载)
    linux加入windows域之完美方案(转载)
    怎样识吉他谱
  • 原文地址:https://www.cnblogs.com/Lulus/p/12499891.html
Copyright © 2011-2022 走看看