Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Wpf多列表视图';s绑定到具有不同排序描述的同一集合_C#_Wpf_Listview_Sorting - Fatal编程技术网

C# Wpf多列表视图';s绑定到具有不同排序描述的同一集合

C# Wpf多列表视图';s绑定到具有不同排序描述的同一集合,c#,wpf,listview,sorting,C#,Wpf,Listview,Sorting,我有一个应用程序,允许用户创建同一用户控件的多个实例,该控件包含绑定到自定义数据类型的ObservableCollection的listview。当用户单击标题时,我的listview排序正确,但是它对绑定到ObservableCollection的所有视图进行排序 我的问题是,是否有任何方法可以在ObservableCollection的单独视图上实现排序,或者是否有另一种方法可以克隆ObservableCollection的内容(注意:ObservableCollection不断地被后台服务

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

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

我将收集整理如下:

ICollectionView dataView = CollectionViewSource.GetDefaultView(sourceList.ItemsSource);
dataView.SortDescriptions.Clear();
SortDescription sd = new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sd);
myListView.ItemsSource = ServiceManager.Instance.ActiveObjects; 
我的列表视图的项目源设置如下:

ICollectionView dataView = CollectionViewSource.GetDefaultView(sourceList.ItemsSource);
dataView.SortDescriptions.Clear();
SortDescription sd = new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sd);
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);
}
private ICollectionView\u customerView;
公共ICollectionView客户
{
获取{return\u customerView;}
}
公共CustomerServiceModel()
{
IList customers=ServiceManager.Instance.ActiveObjects;
_customerView=CollectionViewSource.GetDefaultView(客户);
}



您可以在WPF Tutorial.NET网站的页面上找到更多详细信息。

您不需要多个ObsevableCollection实例,实际上您需要的是视图或CollectionView。每个列表都应该有一个单独的CollectionView作为ItemsSource。要创建CollectionView,可以使用CollectionView的构造函数。