10
votes

Collectionviewsource MVVM MVVM pour WPF DataGrid

J'ai mis en œuvre une petite démo de Collectionviewsource pour WPF DataGrid dans MVVM. J'apprécierais vraiment toute aide pour vérifier la mise en œuvre et commenter s'il s'agit de la bonne approche pour utiliser la collectionviewsource. xxx

la vue XAML: xxx

Le code derrière: xxx

Le manutentionnaire hyperlink_click invoque la méthode mise à jourAgrid de la machine virtuelle de transmission des voitures séparées de virgule VM qui sont ensuite utilisées pour filtrer la collection Movielist à l'aide de méthodes d'extension. .


2 commentaires

Votre code est un peu trompeur, veuillez vérifier les noms de classe. ViewModel, TagviewModel .. Nous pouvons donc mieux comprendre.


Oh Désolé @HICHEMC, avait réellement renommé le nom de la classe tout en publiant la question. Oublié de le changer dans le code derrière. Bonne observation cependant. Merci d'avoir attiré mon attention.


3 Réponses :


0
votes

Vous pouvez ignorer l'ajout de ressources en faisant cela directement: DataContext = New TagVieweLodel (); et effectuez vos reliures normalement. Mais je recommande fortement d'utiliser une injection de dépendance.


0 commentaires

21
votes

Vous ne devez pas créer de nouvelles instances de la collection observable et de la vue de la collection. Attribuez un prédicat à la propriété Filtrer sur la vue Collecion et appelez Actualiser chaque fois que vous souhaitez filtrer la collection.

public class ViewModel : NotifyProperyChangedBase
{       
    string uri;

    public ObservableCollection<Movie> MovieList { get; private set; }

    public CollectionView MovieView { get; private set; }

    public ViewModel(MoveList movieList)
    {
        MovieList = movieList;
        MovieView = GetMovieCollectionView(MovieList);
        MovieView.Filter = OnFilterMovie;
    }

    public void UpdateDataGrid(string uri)
    {     
        this.uri = uri;
        MovieView.Refresh();
    }

    bool OnFilterMovie(object item)
    {
        var movie = (Movie)item;
        return uri.Contains(movie.ID.ToString());
    }

    public CollectionView GetMovieCollectionView(ObservableCollection<Movie> movList)
    {
        return (CollectionView)CollectionViewSource.GetDefaultView(movList);
    }
}



2
votes

Voici un exemple d'instanciation d'une collectionViewsource afin d'activer le filtrage multi-filtrage dans un Datagramrid: http://www.codeproject.com/articles/442498/Multi-filtered-wpf-DataGrid-with-mvvm

La collectionviewsource a été instanciée dans la vue XAML mais est liée à une collection d'objets instanciés dans le modèle de vue. Le modèle de vue utilise ensuite la collectionviewsource pour filtrer les données dans la DataGrid.

Quelles sont l'approche droite pour instancier une collectionviewsource - qui est discutable.


0 commentaires