我有一个 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方式...
有人可以帮帮我吗?