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