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

标签 c# wpf listview sorting

我有一个应用程序,它允许用户创建同一用户控件的多个实例,该控件包含一个绑定(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/

相关文章:

c# - ASP.NET 页面 'Page_Load' 在母版页的 'Page_Load' 事件之前触发?

c# - 无法从 MSBuild 引用 Nuget 包的 "tools"文件夹中的可执行文件

c# - 依赖注入(inject)以在 MVVM 中以对话框形式启动 View

JavaFX : Update of ListView if an element of ObservableList changes

c# - .NET 中的简单 rsa 加密/解密?

c# - 如何确定可移植类库中的当前代码页?

c# - 如何在 XAML C# 的动态组合框中仅显示字典的值部分?

wpf - 如何从 WPF 中的子页面访问父窗口的控制?

android - 如何从android中的sdcard获取指定的视频?

Android,ListView测试代码上的空指针异常