У вас есть следующие зависимости:
Вид → Связывание → Модель
Теперь концепция выглядит следующим образом:
Если некоторые данные в вашем Model объекте изменяются, вы должны вызвать событие PropertyChanged
.Зачем?Поскольку объект Binding зарегистрировал метод с событием PropertyChanged
объекта данных.
Поэтому все, что вам нужно сделать, когда что-то меняется в вашем объекте Model , этоподнять событие, и все готово.
Когда вы это сделаете, объект Binding получит уведомление об изменении через ваше событие.В свою очередь объект Binding позволяет объекту View знать, что что-то произошло.Затем объект View может обновить пользовательский интерфейс при необходимости.
Пример кода
Здесь у вас есть скомпилированный пример.Установите несколько точек останова, выполните код с помощью F11 и посмотрите, что происходит за кулисами.Обратите внимание, что этот пример имеет следующую зависимость: View → Model.Я оставил объект Binding.
using System;
using System.ComponentModel;
namespace INotifyPropertyChangedDemo
{
class Program
{
static void Main(string[] args)
{
// Create 2 listeners.
View1 view1 = new View1();
View2 view2 = new View2();
// Create 1 data object.
Model model = new Model();
// Connect listener with data object.
model.PropertyChanged += new PropertyChangedEventHandler(view1.MyPropertyChangedEventHandler);
model.PropertyChanged += new PropertyChangedEventHandler(view2.MyPropertyChangedEventHandler);
// Let data object publish change notification.
model.FirstName = "new name";
// Check whether all listeners got notified.
// ... via console.
}
public class Model : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string firstName;
public string FirstName
{
get { return firstName; }
set
{
if (firstName != value)
{
firstName = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("FirstName"));
}
}
}
}
}
public class View1
{
public void MyPropertyChangedEventHandler(object source, PropertyChangedEventArgs arg)
{
Console.WriteLine("Listener 1: Changed Property: {0}", arg.PropertyName);
string newValue = ((Model) source).FirstName;
Console.WriteLine("Listener 1: Changed Property Value: {0}", newValue);
}
}
public class View2
{
public void MyPropertyChangedEventHandler(object source, PropertyChangedEventArgs arg)
{
Console.WriteLine("Listener 2: Changed Property: {0}", arg.PropertyName);
string newValue = ((Model)source).FirstName;
Console.WriteLine("Listener 2: Changed Property Value: {0}", newValue);
}
}
}
}