Привязка данных работает некорректно, если наблюдаемая переменная находится в MainWindow.cs

Я смущен тем, что моя привязка данных не работает правильно, когда наблюдаемая переменная находится в MainWindow.cs, несмотря на правильную работу в другом классе. Я выяснил, что проблема вызвана различным поведением этого фрагмента кода:

public bool AccountIsSelected { get { return accountIsSelected; } set { accountIsSelected = value; OnAccountIsSelectedChanged(); } }
    private bool accountIsSelected;

    public event EventHandler AccountIsSelectedChanged;                                                                                     

    public void OnAccountIsSelectedChanged()
    {
        if (AccountIsSelectedChanged != null)                   //this stays null in MainWindow
            AccountIsSelectedChanged(this, EventArgs.Empty);
    }

Для некоторых кнопок свойство Включен в MainWindow привязано к переменной AccountIsSelected. Если переменная помещена в какой-либо класс, отличный от MainWindow, этот класс создается в MainWindow, а экземпляр класса устанавливается как DataContext, привязка свойства кнопок Включен работает нормально, потому что AccountIsSelectedChanged не равно нулю. Однако, если переменная помещается в MainWindowDataContext установлен в это), привязка данных не работает, потому что AccountIsSelectedChanged всегда остается нулевым.

Мне нужно, чтобы наблюдаемая переменная находилась в MainWindow, как мне заставить работать уведомление?

Заранее благодарим за любую помощь ...

AccountIsSelectedChanged будет работать только для статическое свойство. Для нестатического свойства необходимо либо реализовать INotifyPropertyChanged, либо объявить свойство зависимости.
Clemens 16.11.2018 19:44

@Clemens, AccountIsSelectedChanged также работает для свойства экземпляра. Сам провел сухой тест, просто узнал об этом. Интересный!

Cinchoo 16.11.2018 19:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
42
1

Ответы 1

Вы должны реализовать интерфейс INotifyPropertyChanged в классе MainWindow, чтобы уведомление об изменении вступило в силу.

В Интернете есть множество примеров того, как реализовать этот интерфейс.

public partial class MainWindow : Window, INotifyPropertyChanged
{
}

Хорошо, почему реализация интерфейса не нужна, когда связанное свойство помещено в другой класс, экземпляр которого в MainWindow установлен как DataContext, затем <

Bruno Schwarzbach 16.11.2018 20:01

У меня нет на это ответа. Может быть это ошибка. До сих пор я понял, что «AccountIsSelectedChanged» работает только для статического свойства. Но, помогая вам сегодня с вашим образцом, я узнал, что он работает как свойство instance, так и до тех пор, пока он определен в другом классе.

Cinchoo 16.11.2018 20:06

Другие вопросы по теме