WPF Datagrid 数据变化都会自动触发刷新
时间: 2024-10-08 14:20:42 浏览: 81
在WPF中,DataGrid通常不会自动因数据源的变化而立即刷新。然而,可以通过结合使用ICollectionView(可观察集合视图)以及DataGrid的ItemsSource属性,让数据变化时能更智能地刷新。
1. **ICollectionView**:创建一个ICollectionView实例,并将其绑定到DataGrid的ItemsSource。ICollectionView有内置的监视数据源更改的能力,当你向它的SourceCollection添加、删除或修改元素时,它会自动检测并更新视图。
```xaml
<CollectionViewSource x:Key="dataView" />
<DataGrid ItemsSource="{Binding dataView.View}">
<!-- 其他配置 -->
</DataGrid>
```
2. **刷新模式**:设置ICollectionView的RefreshMode属性为`Automatic`或`OnSourceUpdate`,这会让ICollectionView在数据源发生变化时自动刷新视图。
```xml
<CollectionViewSource x:Key="dataView" RefreshMode="OnSourceUpdate">
<CollectionViewSource.View>
<!-- 可视化模板 -->
</CollectionViewSource.View>
</CollectionViewSource>
```
3. **数据绑定**:确保你的数据模型实现了`INotifyPropertyChanged`接口,这样每当数据发生改变,WPF会自动更新UI。
```csharp
public class ViewModel : INotifyPropertyChanged
{
public ObservableCollection<Item> Items { get; set; }
// 更改Items时,需要通知PropertyChanged
private void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
```
阅读全文