J'essaie d'utiliser les fonctionnalités de liaison de données WPF pour obtenir un TreeView
pour afficher une arborescence hiérarchique d'objets (catégories).Liaison de données à TreeView dans XAML
J'ai suivi à peu près this tutorial by Josh Smith, mais en vain: aucun élément n'apparaît dans mon TreeView
.
Voici le code complet de mon application extrêmement simple:
using System.Windows;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = CategoriesTreeViewModel.CreateDefault;
}
}
}
objets ViewModel et les données de l'échantillon:
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
namespace WpfApplication1
{
public class Category
{
public Category()
{
Children = new ObservableCollection<Category>();
}
public ObservableCollection<Category> Children
{
get;
set;
}
public string Name { get; set; }
}
public class CategoriesTreeViewModel
{
public ReadOnlyCollection<Category> FirstGeneration;
private static IEnumerable<Category> SomeCategories
{
get
{
var A = new Category() { Name = "A" };
var B = new Category() { Name = "B" };
var A1 = new Category() { Name = "A1" };
var A2 = new Category() { Name = "A2" };
var B1 = new Category() { Name = "B1" };
var B2 = new Category() { Name = "B2" };
A.Children.Add(A1);
A.Children.Add(A2);
B.Children.Add(B1);
B.Children.Add(B2);
yield return A;
yield return B;
}
}
public static CategoriesTreeViewModel CreateDefault
{
get
{
var result = new CategoriesTreeViewModel()
{
FirstGeneration = new ReadOnlyCollection<Category>(SomeCategories.ToList())
};
return result;
}
}
}
}
Et XAML:
<Window x:Class="WpfApplication1.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 ItemsSource="{Binding FirstGeneration}" Name="treeView1">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Window>
Pourquoi l'ébauche de contrôle TreeView
?
Avez-vous des erreurs de liaison dans votre fenêtre de sortie? Avez-vous essayé de vous lier à autre chose sur votre DataContext juste pour vérifier que la liaison fonctionne? – Thelonias
@Ryan: 'System.Windows.Data Erreur: 40: Erreur de chemin BindingExpression: propriété 'FirstGeneration' introuvable sur 'object' '' CategoriesTreeViewModel '(HashCode = 62819840)'. BindingExpression: Path = FirstGeneration; ' –