1

ビューにデータグリッドがあり、そのItemSourceがViewModelのDataTableにバインドされています。プログラムでDataTableを更新すると(コマンドを使用して列を追加する)、変更がビューに入力されません。また、ビューを無効にした場合、別のタブに切り替えてから元に戻すと、加えられた変更が表示されます。

私のViewModelはINotifyPropertyChangedを継承し、ViewModelの他のバインドされたプロパティに同じプロセスを使用し、それらが期待どおりに機能するため、PropertyChangedイベントを正しく発生させています。

MVVMパターンを使用してバインドされたDataTableに加えた変更をデータグリッドに反映させることは可能ですか?

ビューのコードビハインドでデータグリッドを更新するために使用できるデータグリッドイベントはありますか?

ご協力いただきありがとうございます!-スティーブン

4

2 に答える 2

2

行を変更し、DataTable のセルの内容を編集すると、DataGrid に反映されます (私にとってはうまくいきます)。ColumnChanges はそうではないようです。AutoGenerateColumns オプションを使用している場合、初期化時に使用すると思いますが、その後の変更は監視しません。

列が DataTable に追加されたときに発生するイベント (私は気付いていません) を見つけることができれば、コード ビハインドに手動で追加できます。実用的である場合とそうでない場合がある別のハックは、DataTable プロパティを null に設定してから、プロパティを DataTable に再設定し、OnPropertyChanged を毎回呼び出すことです。これにより、DataGrid の再構築が強制されるはずです。

private DataTable _myDataTable;

public DataTable MyDataTable
{
   get { return _myDataTable; }
   set
   {
        _myDataTable = value;
        OnPropertyChanged("MyDataTable");
   }
}

void SomeMethod()
{
     ....results in column changes
     DataTable holder;
     holder = MyDataTable
     MyDataTable = null;
     MyDataTable = holder;         
}
于 2010-01-19T21:11:57.227 に答える
1

DataGridとのバインドには、ObservableCollection<>タイプを使用する必要があります。これを行うまで、DataGridはViewModelのDataTableの変更を更新できます。

ObservableCollection <>ではなくタイプでバインドする場合、PropertyChangedイベントを発生させることは役に立たないようです。

于 2012-08-20T03:34:11.763 に答える