如何在不使用ObservableCollection时刷新绑定二维数组的WPF DataGrid
解决DataGrid绑定二维数组后不刷新的问题
我来帮你搞定这个问题!你遇到的核心问题是ViewModel的Matrix属性没有通知UI它的值发生了变化——WPF的数据绑定依赖INotifyPropertyChanged接口来感知属性更新,而你当前的自动属性没有触发任何通知事件,所以UI完全不知道数组已经被替换了。
步骤1:让ViewModel实现INotifyPropertyChanged接口
这是WPF MVVM模式下更新UI的基础操作,修改你的ViewModel类,让它继承并实现这个接口:
using System.ComponentModel; using System.Runtime.CompilerServices; public class YourViewModel : INotifyPropertyChanged { // 声明属性变化事件 public event PropertyChangedEventHandler PropertyChanged; // 封装通用的通知方法,简化后续代码 protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } // 重写Matrix属性,添加通知逻辑 private string[,] _matrix; public string[,] Matrix { get => _matrix; set { // 避免不必要的通知(比如赋值相同引用的数组) if (_matrix != value) { _matrix = value; // 触发通知,告诉UI这个属性已经更新 OnPropertyChanged(); } } } }
步骤2:保持原有赋值逻辑即可
你之前的Matrix = resultOfMyMaths;代码不需要改动,现在当你给Matrix赋值新的二维数组时,setter会自动触发PropertyChanged事件,WPF的绑定系统会立刻感知到变化,刷新DataGrid的内容。
额外补充:修改数组内部元素的情况
如果你不是替换整个二维数组,而是修改数组里的某个元素(比如Matrix[0,0] = "new value"),因为数组引用没变化,UI还是不会刷新。这种情况下,你可以在修改元素后手动触发一次通知:
// 修改数组元素 Matrix[1, 2] = "updated content"; // 手动通知UI重新绑定Matrix属性 OnPropertyChanged(nameof(Matrix));
这样就能强制DataGrid重新加载整个数组,显示最新的元素值。
内容的提问来源于stack exchange,提问作者user7345171
相关产品推荐
相关产品推荐

