首页 > 解决方案 > 在 MVVM 环境中删除 DataGrid 中的列

问题描述

我正在尝试从 DataGrid 中删除一整列。我的 DataGrid Itemsource 绑定到 Datatable。当我从 DataTable 中删除列时,DataGrid 中行的内容消失了,但标题和空框一样保留。

我尝试在我的视图模型中添加一个 DataGrid 并将 dataGrid 绑定到它,但它似乎没有任何效果,我的代码变得非常丑陋。我可以在后面的代码中添加一个按钮来删除它:

TestDG.Columns.RemoveAt(idNum);

但这似乎不是正确的方法,我希望它与视图模型相关联以进行错误检查等。似乎 DataTable 和 DataGrid 可能会在 2 个不同的位置不同步删除。

我的 Datagrid 的 Xaml:

<DataGrid x:Name="dataGrid" ItemsSource="{Binding DTLines}" CanUserAddRows="False" ColumnWidth="*">            
    </DataGrid>

我的视图模型中的代码

...
    public DataTable DTLines
    {
        get
        {
            return testDT;
        }
        set
        {
            testDT = value;
            OnPropertyChanged("DTLines");
        }
    } 
...
    private void ExecuteCloseLang()
    {
        TestDT.Columns.Remove("German");
        // What do I put here to remove the line?
    }

如果您需要任何其他澄清,请告诉我。

标签: c#wpfmvvm

解决方案


视图模型不应该知道视图中某些列的任何信息DataGrid。视图或控件本身应该负责在DataGrid.

因此,当从 中删除列时,您的视图模型可能应该通知视图,DataTable然后视图应该从 中删除该列DataGrid以响应此操作。我猜这可能是你目前正在做的事情。

不要尝试DataGrid从视图模型中引用自身。修改时引发事件DataTable并在视图中处理此事件。


推荐阅读