我使用香草WPF Datagrid
有其ItemsSource
綁定到DataTable
:WPF:刷新的DataGrid列DataTable中更改後,MVVM方式
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding ResultTable.DefaultView}" >
哪裏ResultTable
是DataTable。我曾嘗試在運行時以編程方式添加行,DataGrid
將相應更新。但是,DataGrid
不會更新當我在運行時添加或刪除列時。以下是我在我的視圖模型
class MyViewModel : ObservableObject
{
private DataTable resultTable;
public DataTable ResultTable
{
get { return resultTable; }
set
{
resultTable = value;
RaisePropertyChanged("ResultTable");
}
}
public void AddColumn(string columnName)
{
ResultTable.Columns.Add(columnName);
}
}
我發現了一個幾乎相同的問題在這裏WPF Datagrid using MVVM.. is two way binding to DataTable possible?但似乎沒有成爲定論。不幸的是,問這個問題的人似乎已經找到了解決辦法,但沒有打擾張貼它...
我也在這裏找到了一個解決方案http://www.mikeware.com/2012/08/datagrid-dilemma/但它看起來很「駭人聽聞」(更不用說非MVVM)作者本人也承認,如果他找到了一個,他寧可另一種方式。
如何在添加新列時強制更新DataGrid
?如果可能的話,我更願意以MVVM的方式進行。
您是否嘗試過重新設置整個'ResultTable'對象在你的視圖模型?否則您的視圖將不會被通知。你的情況有點特別,因爲不僅數據發生了變化,而且還有數據變化的結構(列)。 – Martin
@Martin,我試着在'ResultTable'的'set'中引發'PropertyChangedEventHandler'。然後,我通過設置「ResultTable = null」並回到原來的參考值來強制刷新。不幸的是,它沒有奏效。 – DaveS
看看這個:http:// stackoverflow.com/questions/15755838 /如何以編程方式添加列-wpf-datagrid -with-mvvm – dev1998