Bonjour,
Dans un projet WPF, j'utilise un design pattern MVVM.
J'ai donc mon modèle d'une vue qui expose des collections d'objets, des commandes (via les différentes implantations de la classe RelayCommand que l'on trouve ici et là)
Jusque là tout va bien.
Mon problème se situe dans le XAML tout particulièrement.
J'ai une listview sur une collection fournie par mon ViewModel fourni en DataContext de la fenêtre... que je bind donc correctement.
Jusque là tout fonctionne parfaitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2<ListView ItemsSource="{Binding Packages}">...</ListView>
La liste affiche bien tous mes éléments moyennant les colonnes que j'ai défini...
Cependant afin de ne pas faire comme d'habitude, j'aimerais que la première colonne affiche un bouton qui doit être lié au DataContext de la Window directement et non pas au Chemin relatif de la listView...
En gros je veux que les boutons de la première collonne voit leur propriété
Command="{Binding RemoveCommand}" pointer sur une ICommand fournie par mon ModelView mais pas par l'objet Package en cours...
Je ne sais pas si je suis assez clair...
Voici donc une explication plus synthétique
j'ai donc dans mon modelView :
et dans mon XAML :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public ObservableCollection<Package> Packages { get { ... } } public ICommand RemoveCommand { get { ... } }
naturellement les 2 autres colonnes Bind bien sur les propriétés NOM et HASH de Package, mais je voudrais que la commande bind sur la propriété fournie par le modelView RemoveCommand.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <ListView Margin="278,54,8,46" ItemsSource="{Binding Path=Packages}" IsSynchronizedWithCurrentItem="True"> <ListView.View> <GridView> <GridViewColumn> <GridViewColumn.CellTemplate> <DataTemplate> <Button Command="{Binding RemovePackageCommand)}"> <Image Source="../Images/Delete.png" Width="16" Height="16" Stretch="Fill"/> </Button> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn DisplayMemberBinding="{Binding Path=NOM}" Header="Nom"/> <GridViewColumn DisplayMemberBinding="{Binding Path=HASH}" Header="Hash"/> </GridView> </ListView.View> </ListView>
J'initialise le dataContext de la Window comme suite.
J'ai déjà essayer divers écritures pour le {Binding} de la propriété Command du Bouton, mais rien n'y fait...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 win.DataContext = new PackageViewModel();
J'ai par exemple essayé
et des variations autour du Path, mais rien n'y fait... Je suis un peu perdu...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 {Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=RemoveCommand}
Donc si quelqu'un à une idée, merci par avance.
Partager