[WPF] User Control TreeView et binding MVVM
Bonjour à tous,
Tout d'abord je tiens à dire que je me suis inspiré de ce post pour tenter de résoudre mon problème mais je n'y suis pas parvenu.
Voici la structure de mon projet:
J'ai un User control contenant un Tree view :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
<Grid>
<!--Tree view in the first column of the principal grid-->
<TreeView x:Name="myTreeViewWPF"
ScrollViewer.VerticalScrollBarVisibility="Visible"
SelectedItemChanged="TreeView_OnSelectedItemChanged" Margin="53,26,41,43" ItemsSource="{Binding cNodeClass}" >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children }" >
<TextBlock Text="{Binding Title}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid> |
Ce User Control est appelé dans une vue:
Code:
1 2 3 4 5
|
<Grid>
<ProductionWorkingParametersTableComponent:ProductionWorkingParametersTable />
</Grid>
</UserControl> |
Dans le code behind de cette vue je renseigne le datacontext:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
public partial class TreeView_View : UserControl
{
//------------------------------------------------------------------------
//------------------------------------------------------------------------
#region Fields
TreeView_ViewModel treeView_ViewModel; // ViewModel of the view contains the data needed by the view
#endregion
//------------------------------------------------------------------------
//------------------------------------------------------------------------
#region Constructor
public TreeView_View()
{
InitializeComponent();
// set the datacontext of the view
treeView_ViewModel = new TreeView_ViewModel();
DataContext = treeView_ViewModel;
}
#endregion |
Voici maintenant le view model :
Code:
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
|
public class TreeView_ViewModel
{
//------------------------------------------------------------------------
//------------------------------------------------------------------------
#region Properties
private NodeClass _cNodeClass = new NodeClass();
public NodeClass cNodeClass
{
get { return _cNodeClass; }
set { _cNodeClass = value; }
}
#endregion
//------------------------------------------------------------------------
//------------------------------------------------------------------------
#region Constructor
public TreeView_ViewModel()
{
this.RetrieveTreeViewInformation();
}
#endregion
//------------------------------------------------------------------------
//------------------------------------------------------------------------
#region Methods
/// <summary>
/// Used to retrieve information of the tree view
/// </summary>
private void RetrieveTreeViewInformation()
{
NodeClass myClass = new NodeClass();
myClass.Text = "myText";
this.cNodeClass = myClass;
myClass.Children.Add(new NodeClass { Text = "coucou" });
}
#endregion
} |
Ma classe NodeClass est de type:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
public class NodeClass
{
public string Text { get; set; }
private ObservableCollection<NodeClass> _Children = new ObservableCollection<NodeClass>();
public ObservableCollection<NodeClass> Children
{
get
{
return (this._Children);
}
private set
{
this._Children = value;
}
}
} |
Et pour finir la vue contenant mon user control est appelée dans mon main window.xaml
Code:
1 2 3 4 5
|
<Grid>
<ScreenView:TreeView_View />
</Grid>
</Window> |
Voilà pour la structure du projet, rien ne s'affiche sur mon TreeView, j'ai un doute sur le binding de "ItemSource" du tree view sur ma class cNodeClass mais j'ai tenté d'autres possibilités sans succès ...
Merci à vous de me venir en aide !