2009-06-10 7 views
2

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?

+0

ce qui se passe lorsque vous attribuez dataGrid.DataContext = filteredRows? Cela devrait fonctionner, je pensais. –

+0

Si vous ajoutez des '' ticks '' autour de votre code, vous devriez aussi pouvoir publier du code générique. – Oskar

+0

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. –

Répondre

0

Il semble que des problèmes similaires aient été rencontrés dans this question. Dans les commentaires, il dit même que définir le datacontext sur null, puis ré-affecter cela ne fonctionne pas.

Peut-être que vous devez modifier la collection d'articles comme mentionné dans cette réponse?

0

Avez-vous essayé de définir la propriété ItemsSource?

3

J'ai rencontré un problème similaire. Nécessaire de réappliquer les convertisseurs sur mon DataGrid après avoir modifié certaines valeurs de style.

Pour moi, cela a fonctionné:

myGrid.Items.Refresh() 

Il semble réappliquer toutes les règles de sorte qu'il peut travailler pour vous.

1

myGrid.Items.Refresh() a travaillé pour moi aussi, juste re-définir le contexte avant

public void GridExamsRefresh() 
{ 
    grdExamenes.ItemsSource = (this.objPacienteOfContext).Exams; 
    grdExamenes.Items.Refresh(); 
} 
Questions connexes