WPF привязка DataContext к полю родительского DataContext

141
22 января 2019, 08:10

Есть у меня главная форма, у нее в DataContext указана модель этой формы. В этой модели есть свойство, ссылающееся на другую модель. Я хочу определенный элемент формы привязать к контексту той самой модели, что находится в свойстве. Я пробовал писать DataContext={Binding anotherModel}, это не помогает. даже если использовать Mode=TwoWay.

Модель:

public static MainWindow instance;           // статическая ссылка на объект MainWindow
private static MyClass _anotherModel = null; // внутренне хранилище значения
public static MyClass anotherModel           // обработчик изменения значения
{
    get => _anotherModel;
    set
    {
        if (_anotherModel == value) return;
        _anotherModel = value;
        instance.PropertyChanged?.Invoke(instance, new PropertyChangedEventArgs("anotherModel "));
    }
}

Элемент формы:

<TabControl x:Name="Tabs" DataContext="{Binding anotherModel, Mode=TwoWay}"></TabControl>

Когда я проверяю DataContext этого элемента через динамическое визуальное дерево, то там написано BindingExpression и его нельзя просмотреть.

Интересный факт: Если перед инициализацией компонентов присвоить этому свойству ссылку на модель, то в инспекторе оно будет отображено и его можно просмотреть.

Answer 1

Когда я сделал свойство нестатическим и стал вызывать PropertyChanged непосредственно из самой модели (вместо того, чтобы вызывать его из instance), все заработало.

Было:

private static MyClass _anotherModel = null;
public static MyClass anotherModel
{
    get => _anotherModel;
    set
    {
        if (_anotherModel == value) return;
        _anotherModel = value;
        instance.PropertyChanged?.Invoke(instance, new PropertyChangedEventArgs("anotherModel"));
    }
}

Стало:

private MyClass _anotherModel = null;
public MyClass anotherModel
{
    get => _anotherModel;
    set
    {
        if (_anotherModel == value) return;
        _anotherModel = value;
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("anotherModel"));
    }
}
READ ALSO
Разработка аналога regedit в Windows [закрыт]

Разработка аналога regedit в Windows [закрыт]

Нужно написать аналог утилиты regedit для работы с реестром Windows для курсовой на c++, можно и на c#Хотелось бы уточнить, насколько вообще это задание...

181
Требуется сохранить код символа в файле

Требуется сохранить код символа в файле

Есть интовый массив с кодами символовЕго нужно записать в файл

168
Контрольная сумма для заголовка IPv4

Контрольная сумма для заголовка IPv4

Был задан такой вопрос, но я вроде как приблизился к решению вопроса о своей задачеВ интернете найден мной такой метод:

190