在WPF数据网格中有选择地隐藏行

时间:2017-05-15 12:32:23

标签: c# wpf datagrid

我有一个WPF Datagrid,项目源是一个列表。 这是代码:

ReleaseDataGridView.ItemsSource = DisplayReleaseList;

其中DisplayReleaseList定义为:

List<ReleaseDataItem> DisplayReleaseList = new List<ReleaseDataItem>();

和ReleaseDataItem是一个具有很少字段及其各自属性的类。 我向DisplayReleaseList添加了一些ReleaseDataItem对象,然后将其设置为ReleaseDataGridView的ItemsSource

我想在ReleaseDataItem类中有一个字段/属性,它决定是否在网格中显示这一行。

例如: 如果在ReleaseDataItem类中有两个字段,例如 bool visible 字符串名称,我将代码编写为:

ReleaseDataItem obj1 = new ReleaseDataItem(false,"abc"); //passed to constructor
ReleaseDataItem obj2 = new ReleaseDataItem(true,"xyz");
DisplayReleaseList.Add(obj1);
DisplayReleaseList.Add(obj2);
ReleaseDataGridView.ItemsSource = DisplayReleaseList;

然后网格将只有与obj2(第二个对象)对应的行。 我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

在集合视图中包装源可以对您进行排序或过滤:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        ReleaseDataItem obj1 = new ReleaseDataItem(false, "abc"); //passed to constructor
        ReleaseDataItem obj2 = new ReleaseDataItem(true, "xyz");
        DisplayReleaseList.Add(obj1);
        DisplayReleaseList.Add(obj2);
        ListCollectionView itemsSource = (ListCollectionView)CollectionViewSource.GetDefaultView(DisplayReleaseList);
        itemsSource.Filter = x => ((ReleaseDataItem)x).Visible;
        ReleaseDataGridView.ItemsSource = itemsSource;
    }

    public List<ReleaseDataItem> DisplayReleaseList { get; private set; } = new List<ReleaseDataItem>();
}

public class ReleaseDataItem
{
    public ReleaseDataItem(bool visible, string value)
    {
        Visible = visible;
        Value = value;
    }

    public string Value { get; private set; }
    public bool Visible { get; private set; }
}