在运行时将新表重新加载/替换到 WPF DataGrid 中
Posted
技术标签:
【中文标题】在运行时将新表重新加载/替换到 WPF DataGrid 中【英文标题】:Reloading/replacing a new table into WPF DataGrid at runtime 【发布时间】:2015-10-19 16:30:57 【问题描述】:我一直在尝试用新的 DataTable 替换由 DataGrid 控件自动生成的整个表格。
我之前看过this question,但我一直在尝试避免在我的视图模型类中引用 UI 元素(或者作为最后的手段将代码添加到 Mainwindow.xaml.cs)。
首先,我将 DataGrid 的 ItemsSource 绑定到 Viewmodel 中的 DataView 属性:
<DataGrid Grid.Row="1" Grid.Column ="1" ItemsSource="Binding DisplayView"/>
private DataView displayView;
public DataView DisplayView
get return displayView;
set displayView = value;
我还有一种方法可以将 SQL 表格式化为适当的 DataTable,然后我将其分配给绑定到网格的 DataView。
DisplayView = dtCloned.DefaultView;
当我在构造函数中调用此方法时,表格会在执行时填满。
在运行时调用它会以相同的格式创建一个新表,但将其分配给 DataView 属性不会重新加载 DataGrid 以显示新表;我哪里错了?
【问题讨论】:
您的视图模型需要实现INotifyPropertyChanged
并通知DisplayView
属性的更改。
【参考方案1】:
要让绑定了解您背后的属性的任何更新,您必须在您的视图模型/模型上实现 INotifyPropertyChanged 接口。
完成后,您的代码应如下所示:
public class YourViewModel : INotifyPropertyChanged
...
public event PropertyChangedEventHandler PropertyChanged;
private DataView displayView;
public DataView DisplayView
get return displayView;
set
displayView = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(nameof(DisplayView)));
...
更多关于接口的信息发现here。
【讨论】:
谢谢,这正是我所需要的。 :)以上是关于在运行时将新表重新加载/替换到 WPF DataGrid 中的主要内容,如果未能解决你的问题,请参考以下文章
在运行时将实体对象添加到 LINQ-to-SQL 数据上下文 - SQL、C#(WPF)