DynamicObjects の ObservableCollection である DataSource を公開する ViewModel があります。バインド時に、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方式で...
誰でも私を助けることができますか?