首先只显示ItemsControl源代码的一部分

时间:2011-05-30 18:46:11

标签: c# wpf

我有一个ItemsControl,显示一组文件。这些文件按最近的修改进行排序,并且有很多文件。

所以,我想最初只展示它们的一小部分(比方说,只有20个左右),并显示一个标有“显示更多”的按钮,在点击时会显示所有内容。

我已经有了解决方案,但它涉及在我的视图模型的source属性上使用一个好的旧LINQ Take。我想知道是否有更清洁的方式。

感谢。

2 个答案:

答案 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(),是一个简洁的解决方案。