INotifyPropertyChanged WPF

Какова цель INotifyPropertyChanged. Я знаю, что это событие запускается всякий раз, когда свойство изменяется, но как может View / UI знать, что это событие запущено:

Вот мой class Customer, который реализует событие INotifyPropertyChanged:

public class Customer : INotifyPropertyChanged { private string _firstName; public string LastName { get; set; } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { if(PropertyChanged != null) PropertyChanged(this,new PropertyChangedEventArgs(propertyName)); } public string FirstName { get { return _firstName; } set { _firstName = value; OnPropertyChanged("FirstName"); } } } 

Но теперь, как уведомить пользовательский интерфейс, что свойство изменилось. Например, когда пользователь присваивает пустое или пустое имя первому имени, как я могу отображать MessageBox в пользовательском интерфейсе.

INotifyPropertyChanged позволяет элементам интерфейса WPF (через стандартные механизмы привязки данных) подписываться на событие PropertyChanged и автоматически обновлять себя. Например, если у вас есть TextBlock, отображающий ваше свойство FirstName, используя INotifyPropertyChanged, вы можете отобразить его в форме и он будет автоматически оставаться в курсе, когда свойство FirstName изменяется в коде.

«Вид» только подписывается на событие, которое сообщает ему все необходимое. Событие включает имя измененного свойства, поэтому, если элемент пользовательского интерфейса привязан к этому свойству, он обновляется.

WPF может знать, потому что он может проверить, реализует ли объект этот интерфейс, затем отбрасывает объект в указанный интерфейс и регистрирует событие. Затем он может инициировать переплетную инфраструктуру для обновления дисплея. Если вы тоже хотите отреагировать, вы можете зарегистрироваться для участия в одном и том же мероприятии.

EDIT: Я перечитываю ваш вопрос и некоторые ваши комментарии. Это возможное решение, использующее событие DataContextChanged и интерфейс INotifyPropertyChanged на объекте Customer. Вы также должны изучить Валидацию привязки данных в WPF и .Net 3.5.

  // assuming: // myWindow.DataContext = new Customer(); myWindow.DataContextChanged += MyWindow_DataContextChanged; private void MyWindow_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { var oldCustomer = e.OldValue as Customer; if (oldCustomer != null) { oldCustomer.PropertyChanged -= Customer_CheckProps; } var newCustomer = e.NewValue as Customer; if (newCustomer != null) { newCustomer.PropertyChanged += Customer_CheckProps; } } private void Customer_CheckProps(object sender, PropertyChangedEventArgs e) { var customer = sender as Customer; if (customer != null) { if (e.PropertyName == "FirstName" && String.IsNullOrEmpty(customer.FirstName)) { // Display Message Box } } } 
  • наследовать стиль от стиля по умолчанию
  • DataTrigger, где значение НЕ равно нулю?
  • VirtualizationStackPanel + MVVM + множественный выбор
  • Режим рендеринга программ - WPF
  • WPF - импортировать изображение в качестве ресурса
  • Dispatcher.CurrentDispatcher vs. Application.Current.Dispatcher
  • Динамически добавлять несколько кнопок в окно wpf?
  • WPF TabControl - предотrotation разгрузки при изменении вкладки?
  • Как я могу использовать RelayCommand в wpf?
  • Как найти, что ScrollViewer прокручивается до конца в WPF?
  • Приложение WPF, в котором есть только значок в трее
  • Давайте будем гением компьютера.