1

我有一个 ViewModel,它公开了一个 DataSource,它是 DynamicObjects 的 ObservableCollection。绑定后,DataGrid 对第一个 DataSource 项调用 GetDynamicMemberNames() 以获取它需要自动生成和绑定到的列。到目前为止,一切都很好。

但是,当我将 DataSource 更改为包含具有完全不同属性的项目并为 DataSource 引发 PropertyChanged 时,Grid 不会重新评估动态成员!

我的问题是,如何让 DataGrid 重新评估 DynamicObject 的成员?如何在初始绑定后强制它调用 GetDynamicMemberNames?

一些代码:

    private ObservableCollection<dynamic> _dataSource;
    public ObservableCollection<dynamic> DataSource
    {
        get 
        { 
           if(_dataSource == null)
           {
               _dataSource = new ObservableCollection<dynamic>();
               foreach(var model in SourceModels)
               {
                   var row = new DynamicDataRow()  // Inherits from DynamicObject ...
                   row["SomeProperty"] = model.GetType().GetProperty("SomeProperty").GetValue(model, null);
                   _dataSource.Add(row);
               }
           }
           return _dataSource; 
         }
    }

如果我在 ViewModel 构造函数中填充 SourceModels 集合,这将起作用。

我正在寻找的是在更改 SourceModels 集合后以调用 GetDynamicMemberNames() 的方式重新绑定网格的某种方法。最好以MVVM方式...

有人可以帮帮我吗?

4

0 回答 0