我有DataContext的一個窗口設置爲自己與這個簡單的XAML佈局的工作方式不同。私人依賴屬性綁定相比,私人CLR屬性
private string NameCLR
{
get { return "CLRProperty"; }
}
private string NameDP
{
get { return (string)GetValue(NameDPProperty); }
set { SetValue(NameDPProperty, value); }
}
private static readonly DependencyProperty NameDPProperty =
DependencyProperty.Register("NameDP", typeof(string), typeof(MainWindow),
new UIPropertyMetadata("DPProperty"));
由於代碼隱藏是部分類定義,部分是XAML。所以,我認爲私有財產應該對XAML可見。但令我驚訝的是,CLR和DP的行爲有所不同。
私有依賴屬性是可訪問的,但私有CLR屬性 不是。
我得到的輸出 - 的
DPProperty
代替
CLRProperty
DPProperty
有人可以讓我知道在DP和CLR屬性與此不同的行爲?
這對了解另一個原因很重要;由於綁定系統直接使用依賴項屬性,它將永遠不會調用暴露在類上的「友好包裝器」標準屬性的getter和setter。在setter中爲這個包裝屬性放置一些特殊的邏輯是一個非常常見的錯誤,只有在Binding系統更新值時纔會發現它沒有被調用。 –
@Clemens - 'CLR屬性不能被訪問,因爲屬性查找是通過綁定完成的 - - 足夠公平。但正如提到的綁定將訪問我標記爲私有的底層靜態DP屬性標識符。那麼,它將如何被訪問? –
@RohitVats不,綁定不會訪問你的'private static'字段。它將直接從依賴屬性系統獲取屬性值。直接訪問靜態字段不會工作,因爲它是靜態的,因此不會與任何類的實例關聯。 – Clemens