J'essaie de développer une fonctionnalité de filtrage pour WPF DataGrid
(à partir de la boîte à outils WPF). Je souhaite qu'un utilisateur clique avec le bouton droit sur une cellule et sélectionne Filter
à partir de son CcontextMenu
, puis la grille doit être filtrée par la valeur de la cellule.WPF DataGrid: Obtenir la propriété de liaison de colonne pour le filtrage
J'essaie le modèle M-V-VM. Le datacontext de mes fenêtres est MainWindowViewModel
qui a la propriété Transactions
. Cette propriété renvoie ObservableCollection<TransactionViewModel>
et la grille de données utilise cette collection comme source d'éléments. Donc, fondamentalement, chaque ligne est limitée à TransactionViewModel
(comme vous pouvez le deviner, cette grille répertorie les transactions). MainWindowsViewModel
a ICollectionView
qui est utilisé pour le filtrage et le suivi de la ligne actuellement sélectionnée. Le DataGrid
a sa propriété IsSynchronizedWithCurrentItem
mis à "vrai", alors myCollectionView.CurrentItem
me donne le TransactionViewModel
actuellement sélectionné.
La seule chose que j'ai encore besoin de savoir est par quelle colonne je dois filtrer. Cela dépend de l'endroit où l'utilisateur a cliqué sur le menu contextuel. Donc, j'essaie de transmettre cette information en utilisant CommandProperty
de l'élément de menu contextuel. Et ici j'ai un vrai problème. J'ai essayé ceci:
CommandParameter="{Binding Column.Binding.Path.Path,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type tk:DataGridCell}}}" />
C'est vraiment laid, mais cela fonctionne pour DataGridTextColumn
s. Malheureusement, j'ai également DataGridTemplateColumn
s, et ils ne fonctionnent pas (le chemin est différent ici, parce que j'ai besoin d'atteindre le modèle de cellule réelle) ...
Alors, comment puis-je mettre en œuvre cette fonctionnalité? Peut-être que tout le chemin est mauvais? Je n'ai trouvé aucun exemple valable à ce sujet. La seule chose que j'ai trouvé est l'implémentation de WPF DataGrid
autofilter sur le CodeProject qui ne fonctionne pas du tout pour une raison quelconque ...
Merci.