Tôi có mã sau và nó hoạt động tốt.Sự kiện PropertyChanged của INotifyPropertyChanged được gán như thế nào?
public partial class MainWindow : Window
{
Person person;
public MainWindow()
{
InitializeComponent();
person = new Person { Name = "ABC" };
this.DataContext = person;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
person.Name = "XYZ";
}
}
class Person: INotifyPropertyChanged
{
string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
OnPropertyChanged("Name");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string strPropertyName)
{
if(null != PropertyChanged)
{
PropertyChanged(this,
new PropertyChangedEventArgs(strPropertyName));
}
}
}
Khi tôi tạo ra "người" đối tượng trong constructor của MainWindow, nó sẽ gán giá trị cho "Tên" tài sản của người, mà thời gian sự kiện PropertyChanged là NULL.
Nếu cùng thuộc tính lớp "người" được gán trong sự kiện Button_Click, sự kiện "PropertyChanged" là NOT NULL và nó trỏ đến OnPropertyChanged.
Câu hỏi của tôi là sự kiện "PropertyChanged" được gán cho phương thức OnPropertyChanged như thế nào?
Xin cảm ơn trước.
Bạn thực sự nên thực hiện onpropertychanged của mình là 'var handler = PropertyChanged; if (null! = handler) handler (điều này, mới PropertyChangedEventArgs (strPropertyName) 'điều này sẽ giúp bạn tránh được một điều kiện chủng tộc –