J'essaye de lier récursivement aux enfants d'un élément dans un TreeView. D'après ce que je peux voir sur MSDN HierarchicalDataTemplate est le chemin à parcourir, mais jusqu'ici je n'ai que partiellement réussi.Liaison récursive dans un TreeView WPF
Ma classe:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DocumentText test = new DocumentText();
this.DataContext = test;
for (int i = 1; i < 5; i++)
{
test.AddChild();
}
foreach (DocumentText t in test.Children)
{
t.AddChild();
t.AddChild();
}
}
}
partial class DocumentText
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public override string ToString()
{
return Name;
}
public List<DocumentText> _children;
public List<DocumentText> Children
{
get { return this._children; }
}
public DocumentText()
{
_name = "Test";
_children = new List<DocumentText>();
}
public void AddChild()
{
_children.Add(new DocumentText());
}
}
Mon XAML: En mainview.xaml:
<Window x:Class="treetest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TreeView Name="binderPanel" DockPanel.Dock="Left"
MinWidth="150" MaxWidth="250" Background="LightGray"
ItemsSource="{Binding Children}">
</TreeView>
</Grid>
</Window>
En app.xaml:
<HierarchicalDataTemplate x:Key="BinderTemplate"
DataType="{x:Type src:DocumentText}" ItemsSource="{Binding Path=/Children}">
<TreeViewItem Header="{Binding}"/>
</HierarchicalDataTemplate>
Ce code produit une liste de la première enfants, mais les enfants imbriqués ne sont pas affichés.
Merci! Cela a fait l'affaire. Je ne connaissais pas non plus HeaderTemplate. – Clay
Je suis surpris que votre solution fonctionne, puisque vos objets ne déclenchent pas d'événements de modification de propriété ou de collection et que vous leur liez avant de remplir leurs collections. –
@Robert - Je pense qu'il est sauvegardé par le fait que Binding ne démarre qu'après la fin du constructeur plutôt que pendant InitializeComponent. +1 sur le besoin de notifications de changement si. Cela permettra d'économiser beaucoup de frustration plus tard si vous implémentez INotifyPropertyChanged et utilisez ObservableCollection au lieu de List. –