在运行时将新表重新加载/替换到 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)

如何在运行时将新用户添加到 Spring Security

将新表列添加到 Microsoft SQL Server 中的特定序号位置

如何将新表添加到 Debezium MySQL 连接器?

WPF C# 在运行时将文本和图像添加到 ComboBox

在 EF 6 和 MVC 5 中使用 Code First 方法将新表添加到现有数据库