WPF MVVM单例模式更新DataGrid绑定的数据
时间: 2024-09-09 16:03:35 浏览: 55
WPF MVVM 模式使用DataGrid
4星 · 用户满意度95%
在WPF MVVM架构中,如果想在单例模式下更新DataGrid绑定的数据,通常你会遵循以下步骤:
1. **创建MVVM模式**:
- 创建一个ViewModel类,例如`MyDataViewModel`,它包含了你的数据集合和相关的观察者(比如`ICollectionView`或`ObservableCollection`),以及更新数据的方法。
```csharp
public class MyDataViewModel
{
private ObservableCollection<MyObject> data;
public ObservableCollection<MyObject> DataSource
{
get => data;
set
{
if (value == data)
return;
data = value;
OnPropertyChanged("DataSource");
}
}
public void UpdateData()
{
// 更新data集合...
DataSource = new ObservableCollection<MyObject>(updatedData);
}
// Implement INotifyPropertyChanged for notifying UI changes
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
```
2. **单例窗口和绑定**:
- 在`MainWindow`中,实例化单例的`MyDataViewModel`,并将DataGrid的Binding设置到`DataSource`属性上。
```xaml
<Window x:Class="YourNamespace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DataGrid ItemsSource="{Binding DataSource}" />
</Window>
```
- 在窗体加载或需要更新数据时,调用`MyDataViewModel`的`UpdateData()`方法。
```csharp
public MainWindow()
{
InitializeComponent();
// 单例实例
var viewModel = MyDataViewModel.Instance;
DataContext = viewModel;
// 更新数据示例
viewModel.UpdateData();
}
```
3. **数据变化处理**:
- 在ViewModel中添加数据变化监听,确保只有在需要的时候才更新UI,而不是每次数据更改都触发更新。
```csharp
public void UpdateData(int? filterValue)
{
if (filterValue.HasValue && !filteredData.Contains(filterValue))
{
filteredData.Add(filterValue);
UpdateDataSource();
}
}
private void UpdateDataSource()
{
// 在这里仅更新已过滤的数据,而不是整个集合
// ...
RaisePropertyChange("FilteredDataSource");
}
```
当你需要更新DataGrid时,传递相应的筛选条件给`UpdateData`方法。
阅读全文