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

VB.NET Discussion :

[WPF XAML] ContextMenu dans un treeview MVVM


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut [WPF XAML] ContextMenu dans un treeview MVVM
    Bonjour,

    J'ai bien avancé sur mon projet, mais j'ai un souci pour avoir un contexte menu sur le 1er enfant d'un treeview.

    J'arrive bien à avoir mon contexte menu, mais la commande ne s’exécute pas.

    Je vous joint un petit projet contenant cette partie et une simulation des données affecté au treeview.

    J'ai commencé a chercher, mais j'avoue que je ne comprend pas tout et ce que j'ai trouvé, je ne suis pas arrivé à le mettre en place.

    Merci de votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    J'ai trouvé une solution, mais cela me plait pas trop, car cela ne respecte pas trop le MVVM.

    Ma solution présente dans le mini projet joint ne fonctionne pas en binding sur la commande du ContextMenu dans le treeview, mais fonctionne parfaitement avec les événements classique.

    Vu sur la modification XAML:
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     <Label.ContextMenu >
                            <ContextMenu >
                                <MenuItem Header="Data" Click="MenuItem_Click" IsCheckable="False"></MenuItem>
                            </ContextMenu>
                        </Label.ContextMenu>

    Code XAML:
    Code XAML : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    <Window x:Class="MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:Testtreeview"
     
            mc:Ignorable="d"
            Title="Text treeview" Height="450" Width="300">
     
        <Window.Resources>
            <local:ConvertUnderscore x:Key="ConvertUnderscore"></local:ConvertUnderscore>
            <HierarchicalDataTemplate 
                DataType="{x:Type local:MyClasse}"
                ItemsSource="{Binding Objets}">
                <StackPanel Orientation="Horizontal">
                    <Image Width="12" Height="12" Margin="3,0" Source="{Binding Image}" />
                    <Label Content="{Binding Nom}" Height ="25" Margin="3,-5,3,-5">
                        <Label.Style >
                            <Style TargetType="Label" >
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Selected_Treeview}" Value="true">
                                        <Setter Property="Foreground" Value="Yellow" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Label.Style>
                    </Label>
                </StackPanel>
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate 
                DataType="{x:Type local:MyObject}"
                ItemsSource="{Binding Attributs}">
                <StackPanel Orientation="Horizontal">
                    <Image Width="12" Height="12" Margin="3,0" Source="{Binding Image}" />
                    <Label Content="{Binding Nom, Converter={StaticResource ConvertUnderscore}}" Height ="25" Margin="3,-5,3,-5">
                        <Label.Style >
                            <Style TargetType="Label" >
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Selected_Treeview}" Value="true">
                                        <Setter Property="Foreground" Value="Yellow" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Label.Style>
                        <Label.ContextMenu >
                            <ContextMenu >
                                <MenuItem Header="Data" Click="MenuItem_Click" IsCheckable="False"></MenuItem>
                            </ContextMenu>
                        </Label.ContextMenu>
                    </Label>
                </StackPanel>
            </HierarchicalDataTemplate>
     
            <DataTemplate 
                DataType="{x:Type local:MyAttribut}">
                <StackPanel Orientation="Horizontal">
                    <Image Width="12" Height="12" Margin="3,0" Source="{Binding Image}" />
                    <Label Content="{Binding Nom}" Height ="25" Margin="3,-5,3,-5">
                        <Label.Style >
                            <Style TargetType="Label" >
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Selected_Treeview}" Value="true">
                                        <Setter Property="Foreground" Value="Yellow" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Label.Style>
                    </Label>
     
                </StackPanel>
            </DataTemplate>
     
        </Window.Resources>
        <StackPanel >
            <TreeView
                    Grid.Column="0"
                    x:Name="tv" 
                    HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" 
                    Margin="10"
                    ItemsSource="{Binding Classes_Treeview}"
                Height="350" Width=" 250"
                     >
                <TreeView.ItemContainerStyle>
                    <Style TargetType="TreeViewItem" >
                        <Setter Property="FontSize" Value="10" />
                        <Setter Property="IsExpanded" Value="{Binding Expanded,Mode=TwoWay}"/>
                        <Setter Property="IsSelected" Value="{Binding Selected, Mode=TwoWay}"/>
                        <Style.Triggers >
                            <Trigger Property="IsSelected" Value="true" >
                                <Setter Property="FontWeight" Value="Bold"  />
                                <Setter Property="FontStyle" Value="Italic"  />
                                <Setter Property="Foreground" Value="Yellow"  />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </TreeView.ItemContainerStyle>
            </TreeView>
            <Button x:Name="CMD_Close"
                    Height="40" Width="80"
                    Content="Close"
                    Command="{Binding CommandClose}"/>
     
        </StackPanel>
    </Window>

    Code VB sous la vue:
    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
    Class MainWindow
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            mv = New ModelVue(Me)
            Me.DataContext = mv
     
        End Sub
     
        Private Sub MenuItem_Click(sender As Object, e As RoutedEventArgs)
            mv.MenuContext_Click()
        End Sub
    End Class
    mv étant du coup déclaré en variable global, mais par principe je les déclares tous comme cela afin que mes autres classes puissent accéder à mes ModelVue, sauf ceux qui non pas d'interaction avec d'autre classe.

    dans mon modelVue j'ai bien sur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Public Sub MenuContext_Click()
            'Code de traitement du click dans le menucontext
        End Sub
    et la cela fonctionne.

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/04/2019, 09h29
  2. [WPF] Treeview MVVM binding --NodeMouseClick
    Par megamario dans le forum VB.NET
    Réponses: 10
    Dernier message: 08/04/2019, 08h47
  3. WPF - affichage de plusieurs colonnes dans un treeview ?
    Par nitrous007 dans le forum Développement Windows
    Réponses: 1
    Dernier message: 17/07/2015, 15h24
  4. [WPF] Ajouter image dans treeview xaml
    Par chris81 dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 04/02/2008, 10h06

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