首页 > 解决方案 > 从 ObservableCollection 自动生成 DataTable 的列

问题描述

我是 WPF 和 MVVM 的新手,遇到了这个问题。

地图模型:

public class MapModel
{
    public string Name { get; set; }
    public int Value { get; set; }
}

我的数据存储在 ObservableCollection ->

private ObservableCollection<MapModel> mapData = new();
public ObservableCollection<MapModel> MapData
{
    get => mapData;
    set
    {
         SetProperty(ref mapData, value);
    }
}

数据取自 REST API 并在OnNavigatedTo方法中设置。一切正确。

我有一个DataTable我想绑定到ObservableCollection并在视图中显示为DataView.

private DataTable mapDataTable = new();
private DataView mapDataView;
public DataTable MapDataTable
{
      get => mapDataTable;
      set
      {
           SetProperty(ref mapDataTable, value);
           MapDataView = mapDataTable.DefaultView;
           MapDataView.RowFilter = $"Name LIKE '%{FilterName}%'";
      }
}

public DataView MapDataView
{
     get => mapDataView;
     set => SetProperty(ref mapDataView, value);
}

我想使用DataTableand的原因DataView是我想在选中复选框时动态添加列。因此,我AutoGenerateColumns=true在 View 和ItemsSource={Binding MapDataView}.

自动生成列时如何将可观察集合绑定到数据表?当我在数据表中添加列或过滤它时,它会在视图中自动更新吗?

这就是我想做的一切。我在问题中添加了 MapModel 中最重要的属性。这ObservableCollection<MapModel>是一个我们称之为家庭的数据的表示(不是一个很好的例子,但仍然是)。我在 DataGrid 上方有一个多选下拉菜单,其中的数字从 1 到 5 - Family 1、Family 2 等。当我从菜单中选择一个值时,我想添加一个名为 Value 2 的列,它从 REST 中获取数据系列 2 的 API,并且仅将值(不是名称,因为名称相同)添加到 DataTable。

标签: c#wpfmvvmdatagrid

解决方案


推荐阅读