Разница в том, что вы не сможете получить доступ к DependencyProperty
извне класса. Это может иметь смысл, если статические методы Get и Set также являются закрытыми, (в прикрепленном поведении, где вам нужно хранить некоторые локальные данные поведения, например) , но не иначе (и я не думаю, что я Я когда-либо видел это с публичными 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, где GetValue
и SetValue
вызываются напрямую.
Click.SetCommand(button, ApplicationCommands.Close);
ICommand command = Click.GetCommand(button);
Если вы посмотрите структуру, вы заметите, что все открытые вложенные свойства имеют открытые DependencyProperty
, например Grid.RowProperty
и Storyboard.TargetNameProperty
. Так что если прикрепленное свойство является публичным, используйте публичное DependencyProperty