2

AttachedPropertiesprivate vs public哪裏有意義? 通常它定義爲(例如):Public vs Private AttachedProperties

public static readonly DependencyProperty CommandProperty = 
DependencyProperty.RegisterAttached(
      "Command", 
      typeof(ICommand), 
      typeof(Click), 
      new PropertyMetadata(OnSetCommandCallback)); 

但我也看到的例子,其中有些屬性是private static readonly...

什麼後果,如果我現在改變上述CommandPropertyprivate?如果我這樣做,似乎仍然可以在我的XAML intellisense中使用。我在這裏錯過了什麼?

回答

4

區別在於您將無法從課外訪問DependencyProperty。如果靜態的Get和Set方法是私有的,這也是有意義的,(在你需要存儲一些行爲本地數據的附加行爲中)但是不是(否則我不認爲我見過這與公共獲取和設置)。

當您想要使用DependencyProperty的示例是DependencyPropertyDescriptor。與公共DependencyProperty你可以做以下

DependencyPropertyDescriptor de = 
    DependencyPropertyDescriptor.FromProperty(Click.CommandProperty, typeof(Button)); 

de.AddValueChanged(button1, delegate(object sender, EventArgs e) 
{ 
    // Some logic.. 
}); 

但如果DependencyProperty是私有的,上面的代碼將無法正常工作。

但是,下面的工作罰款既是公共和私人DependencyProperty(如果靜態get和set方法是公開的)因爲主人類可以訪問私有DependencyProperty。這也適用於通過Xaml設置的Bindings和值,其中GetValueSetValue被直接調用。

Click.SetCommand(button, ApplicationCommands.Close); 
ICommand command = Click.GetCommand(button); 

如果你看看通過框架你會發現,所有的公共附加屬性有一個公共DependencyProperty,例如Grid.RowPropertyStoryboard.TargetNameProperty。因此,如果附屬財產是公開的,請使用公開的DependencyProperty

+0

如果附加行爲是xaml中的數據綁定,並且被定義爲私有? xaml是否會調用靜態的Get和Set方法? – VoodooChild

+0

通過Binding或Xaml設置的值將直接調用'GetValue'和'SetValue',這樣它們對於私有'DependencyProperty'仍然可以正常工作。公共的getter和setter仍然需要能夠找到它 –

相關問題