Это проблема с областью видимости. Как правило, при создании UserControl
вы хотите установить себя как DataContext
для его подэлементов. Это проще всего сделать в конструкторе:
UserControlExample() {
InitializeComponent();
RootElement.DataContext = this;
}
Где RootElement
- это имя, которое вы даете этому первому ребенку (обычно это таблица или панель) вашего UserControl
.
Отсюда вы можете установить естественные привязки для ваших подэлементов следующим образом:
<TextBox x:Name="MainTextBox" IsEnabled={Binding IsEnabled} />
Это работает, поскольку TextBox
наследует DataContext
родительской панели макета.
Наконец, если вы хотите, чтобы ваше свойство UserControl
IsEnabled
было связано с его родителем, лучше всего это сделать в точке объявления:
<Grid>
<UserControlExample IsEnabled={Binding CanModify} />
</Grid>
Таким образом, вы держите свои проблемы отдельно. Субконтролям не важно, что отражает UserControl
. Им просто нужно знать, как включить / отключить, когда свойство элемента управления IsEnabled
меняется.
sub-controls IsEnabled bound to --> (UserControlExample is DataContext)
UserControlExample.IsEnabled bound to --> (VM is DataContext)
VM.CanModify