Je n'arrive pas à croire que je sois perplexe avec cette chose assez simple. À l'origine, j'ai posté ceci dans les discussions de codeplex de données de WPF mais n'ai reçu aucune réponse. Donc j'essaye ici:Rebobinage sur le Datacontext de WPF Datagrid
Je n'arrive pas à trouver un moyen de faire ça. Je crée un DataGrid dont le datacontext est initialement rempli avec des lignes d'une table. J'ai implémenté une fonctionnalité de recherche qui retournera certaines lignes en fonction d'une condition. Supposons que je souhaite afficher uniquement ces lignes, comment puis-je détruire le datacontext initialement créé et ajouter la collection nouvellement filtrée?
je naïvement commencé à le faire comme ceci:
(Modifier la fin: Je ne peux pas sembler taper le code Generics ici - la distribution dans la ligne suivante est suppoed jeter datagrid.Items à MyType (par exemple))
IEnumerable rows = datagrid.Items.Cast();
IEnumerable filteredRows = rows.Where (row => row.someCondition == true);
comment est-ce que je fais maintenant mon affichage de grille de données seulement les filtersRows? En train de faire:
datagrid.DataContext = null;
datagrid.DataContext = filteredRows;
ne fonctionne pas (il sent même stupide pour une raison quelconque).
J'ai aussi besoin de faire l'inverse (une fois que cela fonctionne). Certains boutons doivent permettre à l'utilisateur de «supprimer» les résultats de la recherche et de rebrancher le DataContext sur «rows» (dans l'extrait ci-dessus).
Qu'est-ce qui me manque?
ce qui se passe lorsque vous attribuez dataGrid.DataContext = filteredRows? Cela devrait fonctionner, je pensais. –
Si vous ajoutez des '' ticks '' autour de votre code, vous devriez aussi pouvoir publier du code générique. – Oskar
Apparemment, le moyen de le faire est d'affecter ce délégué (qui filtre les lignes) directement à la propriété Filter de la collection Items. Je vais essayer cela une fois que je serai au travail. Je ferai rapport sur la façon dont les choses se sont déroulées. –