Есть у меня главная форма, у нее в 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 и его нельзя просмотреть.
Интересный факт: Если перед инициализацией компонентов присвоить этому свойству ссылку на модель, то в инспекторе оно будет отображено и его можно просмотреть.
Когда я сделал свойство нестатическим и стал вызывать 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"));
}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости