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

UWP中ExpandoObject的PropertyChanged事件无法更新UI求助

解决UWP DataGrid绑定ExpandoObject时数据更新不同步UI的问题

问题根源

ExpandoObject虽实现了INotifyPropertyChanged,但仅通过动态成员语法(dynamic)修改属性时才会自动触发PropertyChanged事件;若通过IDictionary<string, object>接口修改键值对,不会触发该事件,导致DataGrid绑定无法感知数据变化,UI也就不会实时更新。

解决方案

方案1:改用动态成员语法修改属性(推荐)

直接通过dynamic类型访问ExpandoObject的属性,让其自动触发事件:

private void TestUpdateFirstItem(object sender, RoutedEventArgs e)
{
    dynamic firstRow = Items[0];
    firstRow.first = "Test Update Cell";
}

修改后,DataGrid会立即同步更新UI。

方案2:手动触发PropertyChanged事件(适配字典修改场景)

若因业务需求必须通过IDictionary接口修改,可手动获取INotifyPropertyChanged实例并触发事件:

private void TestUpdateFirstItem(object sender, RoutedEventArgs e)
{
    var firstRow = (IDictionary<string, object>)Items[0];
    var notifyObj = Items[0] as INotifyPropertyChanged;
    
    if (firstRow.ContainsKey("first"))
    {
        firstRow["first"] = "Test Update Cell";
        // 手动触发对应属性的变更事件
        notifyObj?.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("first"));
    }
}

补充说明

  • 你当前的TwoWay绑定设置是正确的,问题核心在于ExpandoObject的事件触发机制差异。
  • 动态增删列时,新增属性同样建议使用dynamic语法设置,或针对新增属性名手动触发PropertyChanged事件,即可保证UI同步。

提问小建议

后续提问可补充HandlePropertyChanges方法的实现代码,方便验证事件触发的具体场景;另外可明确说明测试事件触发时使用的是dynamic还是字典修改方式,能更快定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:56:11