Frage

Ich versuche nur, einen Weg zu finden, die erweitern / Einsturz des TreeView Knoten durch das Objekt zu steuern, sind sie gebunden. Das Objekt hat eine IsExpanded Eigenschaft, und ich möchte, dass die Verwendung der TreeView Knoten zu zeigen, sich erweitert oder reduziert, basierend auf dieser Eigenschaft.

Hier ist mein 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>
War es hilfreich?

Lösung

Kam mit Lösung auf. Wirklich einfach:

    <Style TargetType="{x:Type TreeViewItem}">
        <Setter Property="IsExpanded" Value="{Binding IsNodeExpanded}">
        </Setter>
    </Style>

So wird der Stil das Objekt gebunden an die TreeViewItem und sieht an seinem IsNodeExpanded Attribut und es weist diesen Wert der TreeViewItem.IsExpanded Eigenschaft. Wenn Sie Mode = TwoWay hinzufügen, werden sie einander mitteilen (TreeViewItem wird das Objekt sagen, wenn es wurde erweitert).

Danke!

Andere Tipps

FWIW, die Sie interessieren könnten in diesem Codeproject Artikel von Josh Smith das zeigt, wie eine MVVM basierte Baumansicht erstellen unter Verwendung eines generischen (n-Ebene) Ansatzes.

Ich schlage nicht vor etwas nicht in Ordnung Implementierung mit Carlo ist, aber ich fand, dass Artikel hilfreich für das Verständnis des TreeView-Steuerelement, und MVVM im Allgemeinen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top