IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Binding et Path


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut Binding et Path
    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.

  2. #2
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut,

    essaie ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.RemoveCommand}

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Merci de ta réponse MetalGeek, et dire que j'avais essayé quelque chose de similaire, mais j'avais fait une faute de frappe... ca risquait pas de fonctionner

    Mea culpa. Enfin c'est pas grave, merci pour l'aide car exactement ce dont j'avais besoin.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de Binding et de Path
    Par nakk01 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 21/11/2011, 10h42
  2. Binding ElementName + Path
    Par dtcSearch dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 08/01/2010, 14h52
  3. récupérer le path system
    Par Eugénie dans le forum MFC
    Réponses: 4
    Dernier message: 22/12/2003, 13h03
  4. Réponses: 3
    Dernier message: 10/06/2003, 14h16
  5. Redhat-9 changer le path des databases
    Par jean christophe dans le forum Installation
    Réponses: 7
    Dernier message: 30/05/2003, 17h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo