我有一个ItemsControl,显示一组文件。这些文件按最近的修改进行排序,并且有很多文件。
所以,我想最初只展示它们的一小部分(比方说,只有20个左右),并显示一个标有“显示更多”的按钮,在点击时会显示所有内容。
我已经有了解决方案,但它涉及在我的视图模型的source属性上使用一个好的旧LINQ Take
。我想知道是否有更清洁的方式。
感谢。
答案 0 :(得分:2)
为什么不将您分配给ItemsSource的对象处理此逻辑 - 在第一次分配时,它将报告有限的项目子集。单击“显示更多”时,将更新对象以显示更多(或所有条目),然后通知框架该属性已更改(例如,使用IPropertyNotifyChanged)。
public class MyItemSource
{
private List<string> source = { ... };
public MyItemSource()
{
this.ShowThisMany = 20;
}
public int ShowThisMany
{
get;
set; // this should call\use the INotifyPropertyChanged interface
}
public IEnumerable<string> this[]
{
return this.source.Take(this.ShowThisMany);
}
}
...
MyItemsSource myItemsSource = new MyItemsSource();
ItemsControl.Source = myItemsSource;
...
void OnShowMoreClicked(...)
{
myItemsSource.ShowThisMany = 50;
}
答案 1 :(得分:0)
为此,您需要在数据上创建某种“视图”。 WPF框架中没有任何内容可以免费提供此功能。在我看来,简单的Linq Take()
,是一个简洁的解决方案。