gpt4 book ai didi

c# - Wpf 多个 ListView 绑定(bind)到具有不同排序描述的同一集合

转载 作者:行者123 更新时间:2023-11-30 16:10:25 25 4
gpt4 key购买 nike

我有一个应用程序,它允许用户创建同一用户控件的多个实例,该控件包含一个绑定(bind)到自定义数据类型的 ObservableCollection 的 ListView 。在用户单击标题时,我对 ListView 进行了正确排序,但是它对绑定(bind)到 ObservableCollection 的所有 View 进行了排序。

我的问题是,是否有任何方法可以在与 ObservableCollection 分开的 View 上实现排序,或者是否有另一种方法来克隆 ObservableCollection 的内容(注意:ObservableCollection 不断地被后台服务添加到必须实时显示)。

我正在对集合进行如下排序:

ICollectionView dataView = CollectionViewSource.GetDefaultView(sourceList.ItemsSource);
dataView.SortDescriptions.Clear();
SortDescription sd = new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sd);

我的 ListView 的项目源设置如下:

myListView.ItemsSource = ServiceManager.Instance.ActiveObjects; 

我宁愿不维护同一个 ObservableCollection 的多个实例。要求用户能够拥有此用户控件的多个实例,因此不幸的是,我无法轻松解决这个问题并将它们限制为单个实例。

如有任何帮助,我们将不胜感激,在此先致谢。

最佳答案

您的错误是将 ItemsSource 属性直接设置为 ServiceManager.Instance.ActiveObjects 属性:

myListView.ItemsSource = ServiceManager.Instance.ActiveObjects; 

相反,您应该从数据集合为每个 ListView 创建一个单独的 ICollectionView 实例。此示例改编自以下链接的页面:

private ICollectionView _customerView;

public ICollectionView Customers
{
get { return _customerView; }
}

public CustomerViewModel()
{
IList<YourClass> customers = ServiceManager.Instance.ActiveObjects;
_customerView = CollectionViewSource.GetDefaultView(customers);
}

...

<ListBox ItemsSource="{Binding Customers}" />

您可以从 How to Navigate, Group, Sort and Filter Data in WPF 中找到更多详细信息WPF Tutorial.NET 网站上的页面。

关于c# - Wpf 多个 ListView 绑定(bind)到具有不同排序描述的同一集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25865936/

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