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

C# WPF MVVM模式下ObservableCollection变更后Datagrid不更新求助

问题根源

核心问题为集合属性本身缺少属性变更通知:

  • ObservableCollection<T>自带的变更通知仅覆盖集合内部元素的新增、删除、修改操作,当你直接给mGießformenFinal属性赋值全新的ObservableCollection<ModularMold>实例时,属于属性引用变更,需要触发INotifyPropertyChanged的PropertyChanged事件通知UI,你当前使用的自动属性未实现该逻辑。
  • 构造函数中调用方法可正常显示,是因为赋值操作发生在UI绑定DataContext之前,初始化绑定时直接读取到了已填充的集合实例,不需要后续变更通知。

解决方案

方案1:修改集合属性实现,触发属性变更通知

你的ViewModel继承自ObservableObject,可直接调用基类的SetProperty方法自动处理属性变更通知,修改属性定义如下:

private ObservableCollection<ModularMold> _mGießformenFinal = new ObservableCollection<ModularMold>();
public ObservableCollection<ModularMold> mGießformenFinal
{
    get => _mGießformenFinal;
    set => SetProperty(ref _mGießformenFinal, value);
}

修改完成后,直接给属性赋新集合实例的原有逻辑即可正常触发UI更新。

方案2:复用原有集合实例,避免重新赋值

无需修改属性定义,直接清空原有集合后添加新数据,利用ObservableCollection自带的集合变更通知触发UI更新:

public void findCombinations()
{
    CombinationJob cj = new CombinationJob(productId);
    cj.FiltereDiscDB();
    var newData = cj.KombiniereMGießformen();
    // 清空原有集合
    mGießformenFinal.Clear();
    // 把新数据添加到现有集合中
    foreach (var item in newData)
    {
        mGießformenFinal.Add(item);
    }
}

内容的提问来源于stack exchange,提问作者Murre97

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:30:04