Listview 在WinRT中排序可观察集合时出现问题
我需要按照xaml winRT中的starttime对包含会议的列表视图进行排序。 我正在将会议列表绑定到UI。 我们无法在WinRT中使用排序描述,因此我尝试对会议模型的ObservableCollection进行排序。 这是我的密码: myMeetings.xaml:Listview 在WinRT中排序可观察集合时出现问题,listview,c#-4.0,windows-runtime,winrt-xaml,observablecollection,Listview,C# 4.0,Windows Runtime,Winrt Xaml,Observablecollection,我需要按照xaml winRT中的starttime对包含会议的列表视图进行排序。 我正在将会议列表绑定到UI。 我们无法在WinRT中使用排序描述,因此我尝试对会议模型的ObservableCollection进行排序。 这是我的密码: myMeetings.xaml: <ListView x:Name="myMeetingsList" ItemsSource="{Binding SortedData}".... a.startTime)); }
<ListView x:Name="myMeetingsList"
ItemsSource="{Binding SortedData}"....
a.startTime));
}
当我试图显示已排序的会议列表时,它不会显示任何内容。
我一定是做错了什么。任何建议???您需要确定属性
SortedItems
已更改。您需要引发NotifyPropertyChanged
事件。否则,引擎不知道您已将列表更改为新实例
或者,将新排序的项目复制到新清除的
\u sortedData
实例中。只是不要创建一个全新的实例 您不希望SortDescriptions是WinRT CollectionViewSource的一部分吗?哦,伙计,我喜欢。过滤器和组也是如此。但是,没有必要这样说;事实就是这样
对ObservableCollection进行排序就像对其他任何内容进行排序一样,只是您需要确保不重置集合的值,而只重置集合的成员。像这样:
var o = new ObservableCollection<int>();
// fill collection ascending
var n = Enumerable.Range(1, 50);
foreach (var item in n)
o.Add(item);
n = n.Reverse();
// fill collection descending
o.Clear();
foreach (var item in n)
o.Add(item);
var o=新的ObservableCollection();
//按升序填充集合
var n=可枚举范围(1,50);
foreach(n中的var项)
o、 增加(项目);
n=n.反向();
//填充集合递减
o、 清除();
foreach(n中的var项)
o、 增加(项目);
你必须在代码隐藏中完成所有这些吗?实际上,是的。你可以蒙骗一个附加的属性或其他东西,但这只是一些非常简单的代码
由于您再次调用Clear()
而没有将o
设置为newobservedcollection()
,因此UI将很好地跟上您的更改。所以不需要额外的活动或其他什么
剩下的问题是什么时候应该调用sort。这将以个案为基础。而且,只有你知道你的应用程序。当X数据更改时,调用Sort()
话虽如此,如果您认为X的值将频繁更改,那么您可能希望使用反应式扩展来限制事件。如果不频繁,那就不要管那部分了
如何对可观察到的集合进行排序?
如果你看看有哪些解决方案可以做到这一点。他们只是在做我在上面代码中所做的事情。它们只是可观测集合的子类。所有这些都值得这么简单的东西吗?大概你可以决定。但它们都在做同样的事情。我的建议是,少就是多
祝你好运 如何设置视图的数据上下文?
var o = new ObservableCollection<int>();
// fill collection ascending
var n = Enumerable.Range(1, 50);
foreach (var item in n)
o.Add(item);
n = n.Reverse();
// fill collection descending
o.Clear();
foreach (var item in n)
o.Add(item);