在运行时将新表重新加载/替换为WPF DataGrid

时间:2015-10-19 16:30:57

标签: c# wpf xaml mvvm datagrid

我一直在尝试用新的DataTable替换DataGrid控件自动生成的整个表。

之前我查看了this question,但我一直在努力避免在我的viewmodel类中引用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以显示新表;我哪里错了?

1 个答案:

答案 0 :(得分:1)

要使绑定知道后面属性的任何更新,必须在viewmodel / model上实现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