Я создал пользовательский элемент управления, среди прочего, со следующим:
public partial class MyButton : UserControl
{
public bool Enabled
{
get { return (bool)GetValue(EnabledProperty); }
set {
SetValue(EnabledProperty, value);
SomeOtherStuff();
}
}
}
public static readonly DependencyProperty EnabledProperty =
DependencyProperty.Register("Enabled", typeof(bool), typeof(MyButton), new PropertyMetadata(true));
public static void SetEnabled(DependencyObject obj, bool value)
{
obj.SetValue(EnabledProperty, value);
}
public static bool GetEnabled(DependencyObject obj)
{
return (bool) obj.GetValue(EnabledProperty);
}
}
В моем XAML я (пытаюсь) использовать привязку, чтобы установить свойство Enabled:
<MyButton x:Name="myButtom1" Enabled="{Binding CanEnableButton}"/>
Я знаю, что привязка между моим элементом управления и базовой моделью данных действительна и работает, так как я могу связать IsEnabled (собственное свойство базового UserControl), и она работает, как и ожидалось. Однако мое свойство Enabled никогда не устанавливается через вышеуказанную привязку. Я установил контрольные точки на моем наборе / получении свойств, и они никогда не были затронуты.
Я могу только представлять, что пропустил что-то, связанное с привязкой в моем пользовательском элементе управления. Кто-нибудь может увидеть что?
Я пытался реализовать INotifyPropertyChanged на моем элементе управления (и вызывал событие PropertyChanged из моего включенного установщика) ... но это не помогло.
[Кстати: если вам интересно «Почему?»: Я не могу перехватить изменения в состоянии IsEnabled базового элемента управления, поэтому я решил реализовать и использовать собственную версию свойства Enable / disable (которую я называется Включено) - тот, где я мог бы подключить свой собственный код в установщик свойств]