Я смущен тем, что моя привязка данных не работает правильно, когда наблюдаемая переменная находится в 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 не равно нулю. Однако, если переменная помещается в MainWindow (и DataContext установлен в это), привязка данных не работает, потому что AccountIsSelectedChanged всегда остается нулевым.
Мне нужно, чтобы наблюдаемая переменная находилась в MainWindow, как мне заставить работать уведомление?
Заранее благодарим за любую помощь ...
@Clemens, AccountIsSelectedChanged также работает для свойства экземпляра. Сам провел сухой тест, просто узнал об этом. Интересный!





Вы должны реализовать интерфейс INotifyPropertyChanged в классе MainWindow, чтобы уведомление об изменении вступило в силу.
В Интернете есть множество примеров того, как реализовать этот интерфейс.
public partial class MainWindow : Window, INotifyPropertyChanged
{
}
Хорошо, почему реализация интерфейса не нужна, когда связанное свойство помещено в другой класс, экземпляр которого в MainWindow установлен как DataContext, затем <
У меня нет на это ответа. Может быть это ошибка. До сих пор я понял, что «AccountIsSelectedChanged» работает только для статического свойства. Но, помогая вам сегодня с вашим образцом, я узнал, что он работает как свойство instance, так и до тех пор, пока он определен в другом классе.
AccountIsSelectedChangedбудет работать только для статическое свойство. Для нестатического свойства необходимо либо реализовать INotifyPropertyChanged, либо объявить свойство зависимости.