Silverlight MVVM将DataGrid绑定到DynamicObject,重新评估动态成员

时间:2013-01-14 19:49:19

标签: silverlight binding dynamicobject

我有一个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方式......

有人可以帮帮我吗?

0 个答案:

没有答案