You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:44:20