INotifyPropertyChanged是一个类,用于表示数据源对象的数据发生了变化,并通过事件通知机制使监听器方法得到及时更新。在ASP.NET Web Forms和MVVM框架中经常使用INotifyPropertyChanged实现数据的实时绑定更新,其中数组作为基础数据类型和数组对象经常需要更新属性。
首先,在使用INotifyPropertyChanged更新数组绑定时,需要创建一个新的ObservableCollection<T>
类型的数据源,将需要绑定的数组元素添加到这个数组中,并在数据源中实现INotifyPropertyChanged接口的属性,以通知应用程序该数组元素的值有所变化。接下来,使用ItemsSource
属性将新创建的数据源绑定到ListBox
等控件中,完成更新数组绑定的设置。
下面是一个使用INotifyPropertyChanged更新数组绑定的例子代码:
public class MainViewModel : INotifyPropertyChanged
{
private string _name;
public string Name
{
get { return _name; }
set
{
if (_name == value)
{
return;
}
_name = value;
OnPropertyChanged();
}
}
private ObservableCollection<int> _data;
public ObservableCollection<int> Data
{
get { return _data; }
set
{
if (_data == value)
{
return;
}
_data = value;
OnPropertyChanged();
}
}
public MainViewModel()
{
_name = "";
_data = new ObservableCollection<int>();
_data.Add(1);
_data.Add(2);
_data.Add(3);
}
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
PropertyChanged(this, e);
}
}
在本例中,我们定义了一个名为MainViewModel
的数据承载型(ViewModel)控制对象,其中包含一个Name
属性(String类型)和一个Data
属性(ObservableCollection<int>
类型)。在Data
属性中,我们使用INotifyPropertyChanged接口实现了其值的变动,并使用PropertyChanged
事件处理机制让MainViewModel
及时通知到相关调用方。
在MainViewModel
的CreateInstance()方法中,我们初始化了一个包含3个元素的Data
属性。这里有一个非常重要的环节,即使用OnPropertyChanged
方法实现PropertyChanged事件的分发。这方法是一个虚方法(virtual),在数据属性的set
方法中对事件进行委派调用。这样,在数据属性发生值变更时,事件将得到即时响应并通知到应用程序的相关组件。
以上示例代码中定义的MainViewModel
具有两个属性,即Name
和Data
。将一个ObservableCollection<int>
类型的Data
属性作为一个数组来对待,其数组元素的添加、删除以及赋值操作均可以通过INotifyPropertyChanged实现动态绑定和数据实时同步。
领取专属 10元无门槛券
手把手带您无忧上云