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 :

TreeView - Selectionner dynamiquement au démarrage de la fenêtre le premier node [Débutant]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre actif

    Homme Profil pro
    Développeur multimédia
    Inscrit en
    février 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2013
    Messages : 139
    Points : 202
    Points
    202
    Par défaut TreeView - Selectionner dynamiquement au démarrage de la fenêtre le premier node
    Bonjour,

    Je coince ....

    J'ai un TreeView qui affiche deux niveaux (une liste d'objet A, et ces objets A ont une propriété qui contient une liste d'objets B).

    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
     <TreeView  ScrollViewer.VerticalScrollBarVisibility="Visible" ItemsSource="{Binding A}" Height="338" Width="190" >
                            <TreeView.ItemTemplate>
                                <DataTemplate>
                                    <TreeViewItem ItemsSource="{Binding B}" Header="{Binding Name}" FontWeight="Bold">
                                        <TreeViewItem.ItemTemplate>
                                            <DataTemplate>
                                                <DockPanel>
     
                                                    <Image Margin="-10 0" RenderOptions.BitmapScalingMode="HighQuality" Visibility="{Binding Path=ReadOnly, Converter={StaticResource BooleanToVisibilityConverter}}" Height="12" Width="9" Source=".\Icons\Locked.png" />
                                                    <ToggleButton 
                                                        Margin="5 0" 
                                                        Foreground="#FF483737"
                                                        FontWeight="{Binding Path=ReadOnly, Converter={StaticResource BooleanToFontWeigthConverter}}"
                                                        Background="Transparent" BorderThickness="0" Content="{Binding Name}" Click="Select"/>
     
                                                </DockPanel>
                                            </DataTemplate>
                                        </TreeViewItem.ItemTemplate>
                                    </TreeViewItem>
                                </DataTemplate>
                            </TreeView.ItemTemplate>
                        </TreeView>

    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
    19
    20
    namespace TrainDEController
    {
        public partial class ExerciseWindow : Window
        {
            public List<A> Groups { get; private set; }
            public B Selected  { get; private set; }
     
            public ExerciseWindow(User user)
            {
               Groups = RandomDatas.CreateRandomGroups();
                InitializeComponent();
            }
     
            private void Select(object sender, RoutedEventArgs e)
            {
     
            }
     
        }
    }
    Je souhaiterais à l'affichage du treeview automatiquement placer le focus (ou sélectionner) le premier node de l'objet B du premier node de l'objet A.
    J’espère être clair. Merci pour votre aide ...

  2. #2
    Membre expert
    Inscrit en
    avril 2008
    Messages
    2 227
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : avril 2008
    Messages : 2 227
    Points : 3 736
    Points
    3 736
    Par défaut
    Bonjour

    Le Treeview Wpf doit dirigé par les données en coulisses ...

    Exemple code...

    1/class data exemple :
    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
    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
    namespace WpfTreeNode
    {
        public class BaseNode:INotifyPropertyChanged 
        {
            private bool isExpanded;
            public bool IsExpanded 
            {
                get { return isExpanded; }
                set
                {
                    if (value != isExpanded)
                    {
                        isExpanded = value;
                        OnPropertyChanged("IsExpanded");
                    }
                }
            }
            private bool isSelected;
            public bool IsSelected
            {
                get { return isSelected; }
                set
                {
                    if (value != isSelected)
                    {
                        isSelected = value;
                        OnPropertyChanged("IsSelected");
                    }
                }
            }
     
     
     
            public event PropertyChangedEventHandler PropertyChanged;
            public void OnPropertyChanged(string propname)
            {
                PropertyChangedEventHandler h = PropertyChanged;
                if (h != null)
                    h(this, new PropertyChangedEventArgs(propname));
            }
        }
     
     
     
        public class ItemB:BaseNode
        {
            private string  header;
            public string Header
            {
                get { return header; }
                set
                {
                    header = value; 
                    OnPropertyChanged("Header");
     
                }
            }
     
            public ItemB()
                : base()
            {
            }
        }
     
    public class ItemA:BaseNode
        {
            private string header;
            public string Header
            {
                get { return header; }
                set
                {
                    header = value; OnPropertyChanged("Header");
     
                }
            }
            private ObservableCollection<ItemB> children;
            public ObservableCollection<ItemB>  Children
            {
                get { return children; }
                set
                {
                    children = value;
                    OnPropertyChanged("Children");
     
                }
            }
            public ItemA():base()
            {
                children = new ObservableCollection<ItemB>();
            }
        }
     
     
     
    }

    2/ form user exemple

    code xaml du form user:
    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
    <Window x:Class="WpfTreeNode.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:local="clr-namespace:WpfTreeNode"
            Title="MainWindow" Height="350" Width="525">
        <Window.DataContext>
            <local:ListItems/>
        </Window.DataContext>
        <Window.Resources>
            <HierarchicalDataTemplate DataType="{x:Type local:ItemA}"
                                      ItemsSource="{Binding Children}">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Margin="5" Text="{Binding Header}"/>
                </StackPanel>
            </HierarchicalDataTemplate>
            <DataTemplate DataType="{x:Type local:ItemB}">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Margin="5" Text="{Binding Header}"/>
                </StackPanel>
            </DataTemplate>
        </Window.Resources>
        <Grid>
            <TreeView
                x:Name="tv"
                >
                <TreeViewItem
                   Header="Groups"
                    IsExpanded="True"
                    ItemsSource="{Binding }">
                    <TreeViewItem.ItemContainerStyle>
                        <Style TargetType="TreeViewItem">
                            <Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
                            <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
                            <Style.Triggers>
                                <Trigger Property="IsSelected" Value="true">
                                    <Setter Property="Background" Value="Red"/>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </TreeViewItem.ItemContainerStyle>
                </TreeViewItem>
            </TreeView>
        </Grid>
    </Window>
    code behind.cs du form user:
    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
    19
    20
    21
    22
    namespace WpfTreeNode
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            private ListItems groups = null;
            public MainWindow()
            {
                InitializeComponent();
                this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
            }
            void MainWindow_Loaded(object sender, RoutedEventArgs e)
            {
                groups = this.DataContext as ListItems;
     
                groups[0].IsExpanded = true;
                groups[0].Children[0].IsSelected = true;
            }
        }
    }
    bon code...

  3. #3
    Membre actif

    Homme Profil pro
    Développeur multimédia
    Inscrit en
    février 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2013
    Messages : 139
    Points : 202
    Points
    202
    Par défaut
    Bonjour et merci Mabrouki

    Effectivement, je suis sorti du pattern MVVM et forcement...
    En suivant ton modèle ça fonctionne proprement et simplement en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _exercisesViewModel.A.First().B.First().IsSelected = true;
    Super ce pattern

    Merci encore à toi

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

Discussions similaires

  1. [treeview] chargement dynamique
    Par thewaterkidny dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2007, 15h30
  2. [TreeView] Selectionner un "fils"
    Par starkson dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/02/2007, 19h24
  3. Treeviews crées Dynamiquement
    Par Cpt Anderson dans le forum Delphi
    Réponses: 3
    Dernier message: 06/09/2006, 14h46
  4. [VB.NET] Treeview creer dynamiquement a partir d'une bd
    Par graphicsxp dans le forum Windows Forms
    Réponses: 3
    Dernier message: 31/03/2005, 17h02
  5. Ajout dynamique d'un contrôle à une fenêtre
    Par Yacine95000 dans le forum MFC
    Réponses: 6
    Dernier message: 08/06/2004, 16h03

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