Bonjour (Bonsoir plutôt) à tous,

Le titre est assez explicite, je n'arrive pas à récupérer l'élément sélectionné dans une TreeView que j'alimente dynamiquement suivant des requêtes vers une API Rest. J'utilise MVVM.
Je me suis basé sur cet exemple : http://www.codeproject.com/KB/WPF/Tr...ViewModel.aspx

Voici mon code :
Xaml :
Code xml : 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
<Window x:Class="DynamicTreeView.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:DynamicTreeView.ViewModel"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TreeView ItemsSource="{Binding Folders}">
            <TreeView.ItemContainerStyle>
                <!-- 
        This Style binds a TreeViewItem to a TreeViewItemViewModel. 
        -->
                <Style TargetType="{x:Type TreeViewItem}">
                    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                    <Setter Property="FontWeight" Value="Normal" />
                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="FontWeight" Value="Bold" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TreeView.ItemContainerStyle>
 
            <TreeView.Resources>
                <HierarchicalDataTemplate 
                  DataType="{x:Type vm:FolderViewModel}" 
                  ItemsSource="{Binding Children}"
                  >
                    <StackPanel Orientation="Horizontal">
                        <Image Width="16" Height="16" Margin="3,0" Source="Images\folder.png" />
                        <TextBlock Text="{Binding FolderName}" />
                    </StackPanel>
                </HierarchicalDataTemplate>
            </TreeView.Resources>
        </TreeView>
    </Grid>
</Window>

code behind :
Code c# : 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
using System.Windows;
using DynamicTreeView.ViewModel;
using System.Collections.Generic;
using DynamicTreeView.Model;
using System.Net;
using System.Text;
using System.Xml;
 
namespace DynamicTreeView
{
    /// <summary>
    /// Logique d'interaction pour MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
 
            List<Folder> list = new List<Folder>();
 
            WebClient serviceRequest = new WebClient();
            serviceRequest.Credentials = new NetworkCredential("username", "password");
            serviceRequest.Encoding = Encoding.UTF8;
 
            var res = serviceRequest.DownloadString("url");
 
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(res);
 
            XmlNode root = doc.DocumentElement;
            foreach (XmlElement elemUser in root.ChildNodes)
            {
                list.Add(new Folder(elemUser.GetAttribute("title"), elemUser.GetAttribute("id")));
            }
 
            FolderViewModel viewModel = new FolderViewModel(list);
            base.DataContext = viewModel;
 
        }
    }
}

FolderViewModel :
Code c# : 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
using DynamicTreeView.Model;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Xml;
 
namespace DynamicTreeView.ViewModel
{
    class FolderViewModel : TreeViewItemViewModel
    {
        readonly Folder _folder;
        readonly ReadOnlyCollection<FolderViewModel> _folders;
 
        public FolderViewModel(Folder folder)
            : base(null, true)
        {
            _folder = folder;
        }
 
        public FolderViewModel(List<Folder> folders)
        {
            _folders = new ReadOnlyCollection<FolderViewModel>(
                (from folder in folders
                 select new FolderViewModel(folder))
                 .ToList());
        }
 
        public ReadOnlyCollection<FolderViewModel> Folders
        {
            get { return _folders; }
        }
 
        public string FolderName
        {
            get { return _folder.FolderName; }
        }
 
        public string FolderId
        {
            get { return _folder.FolderId; }
        }
 
        protected override void LoadChildren()
        {WebClient serviceRequest = new WebClient();
            serviceRequest.Credentials = new NetworkCredential("username", "password");
            serviceRequest.Encoding = Encoding.UTF8;
 
            var res = serviceRequest.DownloadString("url");
 
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(res);
 
            XmlNode root = doc.DocumentElement;
            List<Folder> list = new List<Folder>();
            foreach (XmlElement elemUser in root.ChildNodes)
                list.Add(elemUser.GetAttribute("id")));
 
            foreach (Folder folder in list)
                base.Children.Add(new FolderViewModel(folder));
        }
    }
}

qui hérite de TreeViewItemViewModel qui est le même que dans l'exemple.

Merci d'avance.