У меня есть пользовательский элемент управления панели инструментов с DependencyProperty IsBusy
Вот как я это использую:
<Controls:myToolbar
Grid.ColumnSpan="5" Mode="DataEntry"
Status="{Binding State, Converter={StaticResource ViewEditingStateToToolbarStateConverter}}"
IsBusy="{Binding IsBusy}"/>
По соглашению все мои ВМ наследуются от базовой ВМ и имеют свойство IsBusy.
Итак, я ЗНАЮ, что это свойство всегда будет доступно на ВМ.
Теперь у меня есть еще 4 свойства, как это. Вместо того, чтобы добавлять их в XAML для всех моих представлений, я хочу знать, как автоматически связать это IsBusy
внутри кода элемента управления, чтобы мне не пришлось связываться в XAML?
EDIT
На самом деле я нашел ответ на свой вопрос: Silverlight: программно связывающие свойства элемента управления
Теперь мой вопрос:
Правильно ли применять эту привязку в конструкторе следующим образом?
public myToolbar()
{
this.DefaultStyleKey = typeof(myToolbar);
var binding = new Binding("IsBusy") { Mode = BindingMode.TwoWay };
this.SetBinding(IsBusyProperty, binding);
}
Должен ли я проверить, существует ли привязка XAML (другая привязка) к этому свойству, а не привязка? Это работает в любом случае, но мне интересно, если это плохо для производительности, запахов и т.д.?
Как насчет этого в onApplyTemplate
. Это лучший способ?
if (GetBindingExpression(IsBusyProperty) == null)
{
var binding = new Binding("IsBusy") { Mode = BindingMode.TwoWay };
this.SetBinding(IsBusyProperty, binding);
}