Comment obtenir des articles à partir de CollectionViewSource?
Je suis en utilisant objet collectionviewsource pour filtrer les enregistrements affichés dans une ListBox. Le code xaml de la façon suivante.
<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>
Et voici mon code-derrière ( s'il vous plaît n';t l'esprit de ce code-behind dans la pratique, l'application que je suis en utilisant le meilleur de MVVM pour ce scénario).
public partial class ListBoxFilterUsingCollectionViewSource : Window
{
private string _text="";
private readonly CollectionViewSource _viewSource;
public ListBoxFilterUsingCollectionViewSource()
{
InitializeComponent();
_viewSource = this.FindResource("cvs") as CollectionViewSource;
}
private void CollectionViewSource_Filter(object sender, FilterEventArgs e)
{
var character = e.Item as Character;
e.Accepted = character != null && character.First.ToLower().Contains(_text.ToLower());
}
private void txtSearch_TextChanged(object sender, TextChangedEventArgs e)
{
_text = txtSearch.Text;
_viewSource.View.Refresh();
SetSummary();
}
private void SetSummary()
{
var initialCount = 10; //HELP????
var filteredCount = 10; //HELP????
txtSummary.Text = String.Format("{0} of {1}", filteredCount, initialCount);
}
}
QUESTION:
J'ai Besoin d'aide dans l'écriture de la "SetSummary" la méthode, où je peux obtenir le "initialCount" et le "filteredCount" de l'objet collectionviewsource objet.
Merci pour votre intérêt.
source d'informationauteur Manish Basantani
Vous devez vous connecter pour publier un commentaire.
De la source, de collecte et de collectionview les deux implémentant IEnumerable de sorte que vous pouvez toujours parcourir et de compter combien sont en eux. Mais je ne recommande pas de faire cela si vous n'avez pas accès à la perception que vous avez utilisé comme source.
Vous pouvez également faire de
_viewSource.View.Cast<object>().Count()
pour la liste filtrée et_viewSource.View.SourceCollection.Cast<object>().Count()
pour l'original.Je pense que la meilleure solution est, comme d'habitude, Linq!
...ou...
...si vous ne connaissez pas les éléments de type à l'exécution!
Si vous êtes en train de faire MVVM, vous pourriez avoir votre VM créer une collection de vue plutôt qu'un être créé sur votre compte par l'
CollectionViewSource
. Ensuite, vous avez le contrôle sur ce type de CV est créé, vous pouvez créer unListCollectionViewSource
qui a unCount
de la propriété. Cela dépend vraiment sur les propriétés des données que vous avez de filtrage.