VS中的ComboBox绑定的数据源,怎么用MVVM模式实现一个页面的数据改变,其他页面绑定同样数据源源的控件数据也改变
时间: 2024-03-26 22:34:17 浏览: 59
首先,需要在ViewModel中定义一个ObservableCollection类型的属性作为数据源,并在构造函数中初始化它。然后,将这个数据源绑定到ComboBox控件的ItemsSource属性上。
接着,在其他需要绑定同样数据源的页面的ViewModel中,也定义一个ObservableCollection类型的属性,并在构造函数中将它初始化为之前定义的数据源。
最后,在数据源发生改变时,需要在ViewModel中触发一个PropertyChanged事件,通知绑定了这个数据源的其他页面的控件更新数据。
示例代码如下:
```
// ViewModel中定义数据源
public class MyViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ObservableCollection<string> _comboBoxItems;
public ObservableCollection<string> ComboBoxItems
{
get { return _comboBoxItems; }
set
{
_comboBoxItems = value;
OnPropertyChanged("ComboBoxItems");
}
}
public MyViewModel()
{
ComboBoxItems = new ObservableCollection<string>();
// 初始化数据源
}
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
// ComboBox控件绑定数据源
<ComboBox ItemsSource="{Binding ComboBoxItems}"/>
// 其他页面的ViewModel中定义同样的数据源
public class OtherViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ObservableCollection<string> _comboBoxItems;
public ObservableCollection<string> ComboBoxItems
{
get { return _comboBoxItems; }
set
{
_comboBoxItems = value;
OnPropertyChanged("ComboBoxItems");
}
}
public OtherViewModel(ObservableCollection<string> items)
{
ComboBoxItems = items;
}
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
```
在数据源发生改变时,调用以下代码通知其他页面的控件更新数据:
```
// 触发PropertyChanged事件
ComboBoxItems.Add("new item");
```
阅读全文