WPF lié aux données treeview agrandir / réduire
Je suis juste essayer de trouver un moyen de contrôler le développement /réduction de la TreeView
nœuds dans l'objet qu'ils sont liés. L'objet a un IsExpanded
bien, et je veux l'utiliser pour montrer la TreeView
nœud lui-même développée ou réduite en fonction de cette propriété.
Voici mon code:
C#:
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
this.DataContext = new List<Parent>() { Base.GetParent("Parent 1"), Base.GetParent("Parent 2") };
}
}
public class Base
{
public string Name { get; set; }
public bool IsExpanded { get; set; }
public static Parent GetParent(string name)
{
Parent p = new Parent() { Name = name };
p.Children.Add(new Child() { Name = "Child 1", GrandChildren = new ObservableCollection<GrandChild>() { new GrandChild() { Name = "Grandchild 1" } } });
p.Children.Add(new Child() { Name = "Child 2", GrandChildren = new ObservableCollection<GrandChild>() { new GrandChild() { Name = "Grandchild 1" } } });
p.Children.Add(new Child() { Name = "Child 3", GrandChildren = new ObservableCollection<GrandChild>() { new GrandChild() { Name = "Grandchild 1" } } });
return p;
}
}
public class Parent : Base
{
public ObservableCollection<Child> Children { get; set; }
public Parent()
{
this.Children = new ObservableCollection<Child>();
}
}
public class Child : Base
{
public ObservableCollection<GrandChild> GrandChildren { get; set; }
public Child()
{
this.GrandChildren = new ObservableCollection<GrandChild>();
}
}
public class GrandChild : Base
{
}
XAML:
<Window x:Class="HeterogeneousExperimentExplorer.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:HeterogeneousTree"
Title="Window2" Height="300" Width="300">
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Parent}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Parent}" ItemsSource="{Binding GrandChildren}">
<TextBlock Text="{Binding Name}" />
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<TreeView ItemsSource="{Binding}" />
</Grid>
</Window>
OriginalL'auteur Carlo | 2009-11-11
Vous devez vous connecter pour publier un commentaire.
Est venu avec la solution. Vraiment simple:
De sorte que le style devient l'objet lié à la TreeViewItem et regarde son IsNodeExpanded attribut et il affecte cette valeur à la TreeViewItem.IsExpanded de la propriété. Si vous ajoutez Mode=TwoWay, ils vont vous informer les uns les autres (TreeViewItem dira l'objet lorsqu'il a été élargi).
Merci!
il devrait être dans
TreeView.Resources
et n'oubliez pas de mettre
Mode=TwoWays
pour la fonctionnalité complèteOriginalL'auteur
FWIW, vous pouvez être intéressé par ce CodeProject article de Josh Smith qui montre comment créer un MVVM en fonction affichage de l'arborescence à l'aide d'un générique (n-niveau).
Je ne dis pas que il n'y a rien de mal avec la mise en œuvre de Carlo, mais j'ai trouvé cet article utile dans la compréhension du contrôle TreeView, et MVVM en général.
OriginalL'auteur