La mise en œuvre d'un contrôle ListView Filtre avec Josh Smith WPF MVVM Démo App

J'ai essayé de développer Josh Smith démo MVVM application dans le but de mieux comprendre les principes derrière elle et je l'ai frappé un mur en essayant de mettre en œuvre une fonction de filtre sur une Vue à l'aide d'une ListView.

J'ai passé quelques heures de recherche et de la surface mais sa ne marche pas.

Ma première étape a été de lier une zone de texte à mon avis, à un bien dans mon ViewModel:

<TextBox Height="25" Name="txtFilter" Width="150" Text="{Binding Path=Filter, UpdateSourceTrigger=PropertyChanged}"/>

Cela correspond à ma VM:

public string Filter
    {
        get { return this.filter; }
        set
        {
            this.filter = value;
            OnFilterChanged();
        }
    }

Ma VM utilisé une ObservableCollection de la source de données, mais j'ai essayé de le convertir en un ICollectionView après la lecture de tutoriels:

internal ObservableCollection<StaffViewModel> InnerStaff { get; set; }
    internal CollectionViewSource CvsStaff { get; set; }
    public ICollectionView AllStaff
    {
        get { return CvsStaff.View; }
    }

Dans mon constructeur, j'ai précisé:

CvsStaff = new CollectionViewSource();
CvsStaff.Source = this.InnerStaff;
CvsStaff.Filter += ApplyFilter;

Lors de mon Filtre de la Propriété est mise à jour il appelle OnFilterChanged qui est:

private void OnFilterChanged()
    {
        CvsStaff.View.Refresh();
    }

Mon ApplyFilter Fonction est:

void ApplyFilter(object sender, FilterEventArgs e)
    {
        StaffViewModel svm = (StaffViewModel)e.Item;

        if (this.Filter.Length == 0)
        {
            e.Accepted = true;
        }
        else
        {
            e.Accepted = svm.LastName.Contains(Filter);
        }
    }

Est-il une bête erreur que j'ai faite que quelqu'un peut m'aider? Je suis assez nouveau à WPF et le modèle MVVM donc je suis encore à apprendre!

MODIFIER

Dans la Vue je la lie de la collection:

<CollectionViewSource
  x:Key="StaffGroup"
  Source="{Binding Path=AllStaff}"
  />

et la liste est en tant que tel:

<ListView
      Name="staffList"
      AlternationCount="2" 
      DataContext="{StaticResource StaffGroup}" 
      ItemContainerStyle="{StaticResource StaffItemStyle}"
      ItemsSource="{Binding}"
        Grid.Row="1">
Qu'entendez-vous sa ne fonctionne pas? Comment voulez-vous lier la AllStaff prop dans le code xaml? Quel est le message d'erreur? À première vue, il me semble correct.
s'il vous plaît partagez votre ListView Code XAML
Sa ne fonctionne pas aussi bien que le OnFilterChanged méthode est appelée, la liste n'est pas actualisé et qu'il ne montre pas les résultats du filtre

OriginalL'auteur Alex Naish | 2012-08-30