WPF屬性(一)依賴屬性
阿新 • • 發佈:2018-05-24
沒有 http readonly har https 默認 lease clr 數據源 原文:WPF屬性(一)依賴屬性
依賴對象可以通過Binding依賴在其他對象上,即依賴對象是作為數據的目標而存在,所以需要為依賴對象的依賴屬性添加了CLR屬性包裝,有了這個包裝,就相當於為依賴對象準備了用於暴露數據的Binding Path
還可以自定義一個SetBinding方法用於簡化綁定操作
有一個小技巧,需要申明一個依賴屬性並使用CLR屬性封裝時,只需要輸入propdp,vs就會給出一個提示,連按兩次tab鍵,一個標準被依賴屬性就申明好了,繼續按tab鍵,可以修改依賴屬性的各個參數。
依賴屬性是一種可以自己沒有值,並能通過使用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屬性(一)依賴屬性