2010-01-19 5 views
1

У меня есть datagrid в моем представлении с его ItemSource, привязанным к DataTable в моей ViewModel. Когда я программно обновляю DataTable (добавление столбца через команду), изменения не отображаются в представлении. Кроме того, если я аннулирую вид View, перейдя на другую вкладку и затем вернувшись, отображаются сделанные изменения.WPF Datagrid с использованием MVVM .. возможна двусторонняя привязка к DataTable?

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

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

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

Благодарим за помощь! -Steven

ответ

2

Редактирование строк и редактирование содержимого ячеек в DataTable, отраженных в DataGrid (работает для меня), вы правы, что ColumnChanges не похоже. Если вы используете параметр AutoGenerateColumns, то я предполагаю, что он делает это при инициализации, но не следит за изменениями после этого.

Если вы можете найти событие, которое срабатывает (я его еще не заметил), когда столбец добавлен в DataTable, вы можете добавить его вручную в код позади. Еще один хак, который может быть или не быть практичным, - это установить нулевую силу прошивки DataTable, а затем повторно установить ваше свойство в 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;   
} 
+0

Я нашел способ сделать вашу обходную работу для моего сценария. Я не уверен, почему я не пробовал это сам, но в любом случае я ценю ваше время и помощь. Спасибо! – stevosaurus

+0

Удовольствие, счастливое, что оно помогло – AndyG

1

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

Получение события PropertyChanged представляется бесполезным, если вы связываете его с типом, а не с ObservableCollection <>.

Смежные вопросы