1

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方式で...

誰でも私を助けることができますか?

4

0 に答える 0