C# 仅显示ItemsControl的一部分';首先是什么来源
我有一个ItemsControl显示文件集合。这些文件是按最近的修改排序的,而且有很多 所以,我希望最初只显示其中的一小部分(比如说,只有20个左右),并显示一个标记为“显示更多”的按钮,单击该按钮时将显示所有内容 我已经有了一个解决方案,但它涉及到在我的视图模型的源属性上使用一个好的旧LINQC# 仅显示ItemsControl的一部分';首先是什么来源,c#,wpf,C#,Wpf,我有一个ItemsControl显示文件集合。这些文件是按最近的修改排序的,而且有很多 所以,我希望最初只显示其中的一小部分(比如说,只有20个左右),并显示一个标记为“显示更多”的按钮,单击该按钮时将显示所有内容 我已经有了一个解决方案,但它涉及到在我的视图模型的源属性上使用一个好的旧LINQTake。我想知道是否有更干净的方法 谢谢。要做到这一点,您需要在数据上创建某种“视图”。WPF框架中没有任何东西可以免费为您提供此功能。在我看来,一个简单的Linq,Take(),是一个干净而简单的解决
Take
。我想知道是否有更干净的方法
谢谢。要做到这一点,您需要在数据上创建某种“视图”。WPF框架中没有任何东西可以免费为您提供此功能。在我看来,一个简单的Linq,
Take()
,是一个干净而简单的解决方案。为什么不让您分配给ItemsSource的对象处理这个逻辑?在第一次分配时,它会报告有限的项子集。单击“显示更多”时,对象将更新为显示更多(或所有条目),然后通知框架属性已更改(例如,使用IPropertyNotifyChanged)
公共类MyItemSource
{
私有列表源={…};
公共MyItemSource()
{
this.ShowThisMany=20;
}
公共int显示了这么多
{
得到;
set;//这应该调用\使用INotifyPropertyChanged接口
}
公共IEnumerable this[]
{
返回this.source.Take(this.ShowThisMany);
}
}
...
MyItemsSource MyItemsSource=新的MyItemsSource();
ItemsControl.Source=myItemsSource;
...
单击ShowMore时无效(…)
{
myItemsSource.ShowThisMany=50;
}
.Take()
在我看来相当干净。
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;
}