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.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<ListView ItemsSource="{Binding Packages}">...</ListView>
Jusque là tout fonctionne parfaitement.
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
public ObservableCollection<Package> Packages { get { ... } }
public ICommand RemoveCommand { get { ... } }
et dans mon XAML :

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

J'initialise le dataContext de la Window comme suite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
win.DataContext = new PackageViewModel();
J'ai déjà essayer divers écritures pour le {Binding} de la propriété Command du Bouton, mais rien n'y fait...
J'ai par exemple essayé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=RemoveCommand}
et des variations autour du Path, mais rien n'y fait... Je suis un peu perdu...
Donc si quelqu'un à une idée, merci par avance.