【问题标题】:Reloading/replacing a new table into WPF DataGrid at runtime在运行时将新表重新加载/替换到 WPF DataGrid 中
【发布时间】: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 属性的更改。

标签: c# wpf xaml mvvm datagrid


【解决方案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

【讨论】:

  • 谢谢,这正是我所需要的。 :)
猜你喜欢
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 2010-11-29
  • 1970-01-01
相关资源
最近更新 更多