1. 程式人生 > >WPF屬性(一)依賴屬性

WPF屬性(一)依賴屬性

沒有 http readonly har https 默認 lease clr 數據源

原文:WPF屬性(一)依賴屬性

依賴屬性是一種可以自己沒有值,並能通過使用Binding從數據源獲得值的屬性,擁有依賴屬性的對象稱為依賴對象,在傳統開發中,一個對象所占用的內存在調用new操作符進行實例化的時候就已經決定了,而WPF允許對象在被創建的時候並不包含用於存儲數據的空間,只保留在需要用到數據時能夠獲得默認值、借用其他對象數據或實時分配空間的能力,這種對象就是依賴對象,而這種實時獲取數據的能力就是靠依賴屬性來實現。

WPF中,依賴對象的類型是DependencyObject,依賴屬性的類型是DependencyProperty,DependencyObject具有GetValue和SetValue兩個方法:

        public object GetValue(DependencyProperty dp)
        {

        }

        public void SetValue(DependencyProperty dp, object value)
        {

        }

WPF中所有的控件都是依賴對象,依賴屬性必須以依賴對象為宿主,借助它的SetValue和GetValue方法進行寫入與讀取,因此,想使用自定義的依賴屬性,宿主一定是依賴對象的派生類,依賴屬性有public static readonly三個修飾符修飾,實例使用DependencyProperty.Register方法生成,例如:

public static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Student));

依賴對象可以通過Binding依賴在其他對象上,即依賴對象是作為數據的目標而存在,所以需要為依賴對象的依賴屬性添加了CLR屬性包裝,有了這個包裝,就相當於為依賴對象準備了用於暴露數據的Binding Path

        public int MyProperty
        {
            get { return (int)GetValue(MyPropertyProperty); }
            set { SetValue(MyPropertyProperty, value); }
        }

還可以自定義一個SetBinding方法用於簡化綁定操作

        public BindingExpressionBase SetBinding(DependencyProperty dp, BindingBase binding)
        {
            return BindingOperations.SetBinding(this, dp, binding);
        }

有一個小技巧,需要申明一個依賴屬性並使用CLR屬性封裝時,只需要輸入propdp,vs就會給出一個提示,連按兩次tab鍵,一個標準被依賴屬性就申明好了,繼續按tab鍵,可以修改依賴屬性的各個參數。



WPF屬性(一)依賴屬性