原文: 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鍵,可以修改依賴屬性的各個參數。