WPF Datagrid с использованием MVVM .. возможно ли двухстороннее связывание с DataTable? - PullRequest
1 голос
/ 19 января 2010

В моем представлении есть сетка данных с привязкой ItemSource к DataTable в моей модели представления.Когда я обновляю DataTable программно (добавляя столбец с помощью команды), изменения не добавляются в представление.Кроме того, если я отменяю представление, переключаясь на другую вкладку и затем переключаясь обратно, отображаются сделанные изменения.

Мой ViewModel наследуется от INotifyPropertyChanged, и я правильно вызываю событие PropertyChanged, поскольку использую тот же процессдля других связанных свойств в ViewModel, и они работают должным образом.

Возможно ли получить сетку данных, чтобы отразить изменения, которые я внес в связанный DataTable, используя шаблон MVVM?

Есть ли событие сетки данных, которое я могу использовать для обновления сетки данных в коде представления позади?

Спасибо за вашу помощь!-Steven

Ответы [ 2 ]

2 голосов
/ 20 января 2010

Хотя изменение строк и редактирование содержимого ячейки в 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;         
}
1 голос
/ 20 августа 2012

Вы должны использовать тип ObservableCollection <> для связывания с DataGrid. До этого ваша DataGrid может обновлять изменение DataTable во ViewModel.

Повышение события PropertyChanged кажется бесполезным, когда вы связываетесь с типом, а не ObservableCollection <> .

...