2010-01-19 371 views
1

我有一個DataGrid在我的視圖與它的ItemSource綁定到我的ViewModel中的DataTable。當我以編程方式更新DataTable(通過命令添加列)時,更改不會填充到視圖中。另外,如果我使視圖無效,切換到另一個選項卡然後切換回來,將顯示所做的更改。使用MVVM的WPF Datagrid ..是可以綁定到DataTable的兩種方式嗎?

我的ViewModel繼承自INotifyPropertyChanged,並且我正在引發PropertyChanged事件,因爲我在ViewModel中爲其他綁定屬性使用了相同的過程,並且它們按預期工作。

是否有可能讓datagrid反映我對綁定的DataTable使用MVVM模式所做的更改?

是否有一個datagrid事件可以用來刷新視圖代碼中的數據網格?

感謝您的幫助! -Steven

回答

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;   
} 
+0

我找到了一種方法來使您的解決方法適用於我的方案。我不確定爲什麼我自己沒有嘗試過,但無論如何,我感謝你的時間和幫助。 謝謝! – stevosaurus 2010-01-19 21:38:05

+0

快樂,它很有幫助 – AndyG 2010-01-19 22:26:36

1

您必須使用的ObservableCollection <>類型與DataGrid的結合。在這之前,您的DataGrid可以更新ViewModel中DataTable的更改。

提高PropertyChanged事件似乎沒用,當你綁定類型而不是ObservableCollection <>

相關問題