관리 메뉴

KorSA

C# data binding 시 TreeView 에서 depth가 2 이상일 때.. (ItemsSource를 사용하려면 항목 컬렉션이 비어 있어야 합니다 Error 대처법) 본문

Development Experience/C#

C# data binding 시 TreeView 에서 depth가 2 이상일 때.. (ItemsSource를 사용하려면 항목 컬렉션이 비어 있어야 합니다 Error 대처법)

Praiv. 2020. 1. 2. 20:28
320x100

TreeView에서 표현하고 싶은 데이터가 단순한 리스트라면,

 

ViewModel에서 ObservableCollection<T> 프로퍼티를 만들고

TreeView의 ItemsSource 속성에 방금 만든 ObservableCollection<T>을 바인딩하면 된다.

가령,

 

ViewModel에서

public ObservableCollection<MyData> MyCollection;

 

라고 선언하고 객체를 생성해 둔 다음에

 

View에서

<TreeView ItemsSource="{Binding MyCollection}"/>

라고 하면 된다.

 

하지만 만약

MyCollection의 원소 타입인 MyData가 ObservableCollection<T> 이고,

이것 또한 사용자에게 보여주기 원한다면 우리는 TreeView의 depth가 2 인 모습을 구현해야 한다.

 

이 때 사용할 수 있는 게 ItemTemplate과  HierarchicalDataTemplate 이다.

ItemTemplate을 사용하지 않고 바로 TreeViewItem을 연속으로 사용하려 한다면 

 

"ItemsSource를 사용하려면 항목 컬렉션이 비어 있어야 합니다"

라는 오류가 뜰 것이다.

 

<TreeView ItemsSource="{Binding MyData}">

    <TreeView.ItemTemplate>

        <HierarchicalDataTemplate ItemsSource="{Binding Path=MySecondData}">

            <TreeViewItem>

                <TreeViewItem.ItemTemplate>

                    <HierarchicalDataTemplate>

                        <TreeViewItem Header="{Binding MyName}"/>

                    </HierarchicalDataTemplate>

                </TreeViewItem.ItemTemplate>

            </TreeViewItem>

        </HierarchicalDataTemplate>

    </TreeView.ItemTemplate>

</TreeView>

728x90
728x90
Comments