Что работает
У меня есть окно с виджетом и такой привязкой:
<Button Name="button" IsEnabled="{Binding Path=CanBeEnabled}"/>
и в коде окна я устанавливаю основной контекст данных и контекст данных для этого виджета:
public Controller controller { get; set; }
public WorkflowWindow(Controller con) // constructor
{
controller = con;
InitializeComponent();
DataContext = this;
button.DataContext = controller;
}
Свойство «контроллер» находится в такой простой форме, потому что за время существования окна оно никогда не меняется.
Что не работает
Мне бы хотелосьиметь один контекст данных и использовать вложенную привязку, такую как:
<Button Name="button" IsEnabled="{Binding Path=controller.CanBeEnabled}"/>
и код
public WorkflowWindow(Controller con)
{
controller = con;
InitializeComponent();
DataContext = this;
}
В этом случае виджет всегда отключен.
И небольшие вариациииз этого
public WorkflowWindow(Controller con)
{
controller = con;
InitializeComponent();
DataContext = this;
button.DataContext = this; // directly setting the data context
}
В этом случае виджет всегда включен (здесь это не опечатка).
Вопрос
Как сделатьвторая форма работает?Я предпочитаю вторую форму, потому что тогда я мог связываться с различными источниками, не только из одного контекста данных.
решено
Том ударил по гвоздю в голову - проблема была из-за вложения- кнопка является частью пользовательского элемента управления, и я дважды настраивал контекст данных.Один раз при определении элемента управления, второй раз при его использовании (как здесь).Вот почему WPF запутался - и я потратил два дня на отслеживание проблемы, о мальчик: - (