문제

나는 단지 확장 / 붕괴를 제어 할 수있는 방법을 찾으려고 노력하고 있습니다. TreeView 그들이 묶인 객체를 통해 노드. 객체에는 an이 있습니다 IsExpanded 속성, 그리고 나는 그것을 사용하기 위해 그것을 사용하고 싶습니다. TreeView 노드 자체는 해당 속성에 따라 확장 또는 붕괴되었습니다.

내 코드는 다음과 같습니다.

씨#:

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>
도움이 되었습니까?

해결책

솔루션을 생각해 냈습니다. 정말 간단 :

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

따라서 스타일은 TreeViewItem에 바인딩되고 isnodeexpanded 속성을보고 그 값을 treeViewItem.isexpanded 속성에 할당합니다. Mode = Twoway를 추가하면 서로에게 알립니다 (TreeViewItem은 객체가 확장되었을 때 객체를 알려줍니다).

감사!

다른 팁

fwiw, 당신은 이것에 관심이있을 수 있습니다 Josh Smith의 Codeproject 기사 일반 (N- 레벨) 접근법을 사용하여 MVVM 기반 트리 뷰를 만드는 방법을 보여줍니다.

Carlo의 구현에 문제가 있다고 제안하지는 않지만이 기사는 TreeView Control 및 MVVM을 일반적으로 이해하는 데 도움이된다는 것을 알았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top