Как получить количество элементов из CollectionViewSource?

Я использую CollectionViewSource для фильтрации записей, отображаемых в ListBox. Далее следует xaml.

   <Window x:Class="WPFStarter.ListBoxItemsFilter.ListBoxFilterUsingCollectionViewSource"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="userControl"
        Title="ListBoxFilterUsingCollectionViewSource" Height="300" Width="300">
        <Window.Resources>
        <CollectionViewSource Source="{Binding ElementName=userControl, Path=DataContext.Items}"
                              x:Key="cvs" Filter="CollectionViewSource_Filter"/>
        </Window.Resources>
    <StackPanel Orientation="Vertical">
        <TextBox x:Name="txtSearch" TextChanged="txtSearch_TextChanged"/>
        <TextBlock x:Name="txtSummary" Grid.Column="0" HorizontalAlignment="Right" VerticalAlignment="Bottom"  FontSize="8"></TextBlock>
        <ListBox ItemsSource="{Binding Source={StaticResource cvs}}" DisplayMemberPath="First"/>
    </StackPanel>

</Window>

А вот и мой код (пожалуйста, не обращайте внимания на этот код, Мне нужна помощь в написании метода «SetSummary», в котором я могу получить «initialCount» и «FilterCount» из объекта CollectionViewSource.

Спасибо за ваш интерес.

14
задан Manish Basantani 17 August 2010 в 06:39
поделиться

2 ответа

И исходная коллекция, и просмотр коллекции реализуют IEnumerable, поэтому вы всегда можете перебирать их и подсчитывать, сколько в них содержится. Но я бы рекомендовал делать это только в том случае, если у вас нет доступа к фактической коллекции, которую вы использовали в качестве источника.

private void SetSummary() 
{
    int initialCount = 0;
    foreach(var item in _viewSource.View.SourceCollection)
    {
        initialCount++;
    }

    int filteredCount = 0;
    foreach (var item in _viewSource.View)
    {
        filteredCount++;
    }
}
6
ответ дан 1 December 2019 в 06:00
поделиться

Если вы выполняете MVVM, ваша виртуальная машина может создать представление коллекции, а не то, которое создается от вашего имени с помощью CollectionViewSource . Затем вы можете контролировать, какой тип CVS создается, поэтому вы можете создать ListCollectionViewSource , который имеет свойство Count . Это действительно зависит от свойств фильтруемых данных.

2
ответ дан 1 December 2019 в 06:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: