gpt4 book ai didi

c# - 两个 listViews 绑定(bind)一个数据源,两个过滤器 - 第二个覆盖第一个......为什么?

转载 作者:行者123 更新时间:2023-12-04 05:14:49 24 4
gpt4 key购买 nike

我正在努力解决可以这样概括的 WPF 问题:

  • 有两个 ListView
    <ListView x:Name="listView1"></ListView>
    <ListView x:Name="listView2"></ListView>
  • 在代码隐藏中为它们创建了过滤器:
    var listViewCollection1 = (ListCollectionView)CollectionViewSource.GetDefaultView(Items);
    listViewCollection1.Filter = item => (item as string).Length == 5;
    listView1.ItemsSource = listViewCollection1;

    var listViewCollection2 = (ListCollectionView)CollectionViewSource.GetDefaultView(Items);
    listViewCollection2.Filter = item => (item as string).Length == 3;
    listView2.ItemsSource = listViewCollection2;

    public ObservableCollection<string> items = new ObservableCollection<string>()
    {
    "John",
    "Jan",
    "Lanny",
    "Carol",
    "Hug",
    };

    public ObservableCollection<string> Items
    {
    get
    {
    return items;
    }
    private set
    {
    items = value;
    }
    }
  • 第二个过滤器覆盖第一个过滤器,以下项目显示在两个 ListView 中:
  • 一月
  • 拥抱
  • 谁能告诉我,怎么了?如何正确实例化绑定(bind)到一个数据源、具有两个不同过滤器的两个 listView?

  • 我将不胜感激任何帮助。

    最佳答案

    两个ListView s 本质上绑定(bind)到同一个集合的同一个 View ,你设置一次过滤器然后覆盖它。

    请记住,当您获得对对象的引用时,您不会创建它的副本,而是引用它。仅仅因为该引用的名称不同并不会使其不同。

    您可以通过运行调试器并中断第二个过滤器来发现这一点,您会注意到在该行运行之前,过滤器设置为长度为 5 的 lambda 过滤,然后您将其更改为长度为 3 .

    要实现您想要的,您需要创建另一个 CollectionViewSource , 与 Source设置为原始列表。

    var listViewCollection1 = (ListCollectionView)CollectionViewSource.GetDefaultView(Items);
    listViewCollection1.Filter = item => (item as string).Length == 5;
    listView1.ItemsSource = listViewCollection1;

    var newView = new CollectionViewSource() { Source = Items };
    var listViewCollection2 = (ListCollectionView)newView.View; // Here the View must be used
    listViewCollection2.Filter = item => (item as string).Length == 3;
    listView2.ItemsSource = listViewCollection2;

    (注:未经测试,但原理应该是健全的)

    关于c# - 两个 listViews 绑定(bind)一个数据源,两个过滤器 - 第二个覆盖第一个......为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14419323/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com