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. la vue XAML: p> Le code derrière: p> 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. . p> p>
3 Réponses :
Vous pouvez ignorer l'ajout de ressources en faisant cela directement: DataContext = New TagVieweLodel (); code> et effectuez vos reliures normalement. Mais je recommande fortement d'utiliser une injection de dépendance. P>
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); } }
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 p>
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. p>
Quelles sont l'approche droite em> pour instancier une collectionviewsource - qui est discutable. P>
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.