我使用香草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