2014-02-11 5 views
1

Pun 의도입니다.WPF - TreeView 컨트롤에 희미합니다.

HierarchicalDataTemplate 클래스를 사용하여 간단한 TreeView를 만들고 싶습니다.

<Window.Resources> 
    <ObjectDataProvider 
     x:Key="myDataProvider" 
     ObjectType="vm:ContractViewModel" /> 
</Window.Resources> 

<Window.DataContext> 
    <Binding Source="{StaticResource myDataProvider}" Path="Contract" /> 
</Window.DataContext> 

<StackPanel 
    Orientation="Vertical" 
    VerticalAlignment="Top"> 
    <ListBox MinWidth="400" Margin="10" 
     ItemsSource="{Binding Commissions}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <TextBlock Text="{Binding Id}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
    <TreeView> 
     <HierarchicalDataTemplate DataType="{x:Type m:Contract}" 
            ItemsSource="{Binding Commissions}"> 
      <TextBlock Text="{Binding Id}" /> 
     </HierarchicalDataTemplate> 
    </TreeView> 
</StackPanel> 

내가 MVVM 패턴을 사용하고 있습니다 :

여기 내 문제 XAML입니다. StaticResource "myDataProvider"는 Contract (사용자 정의) 클래스의 인스턴스를 반환합니다. 내 모델은 다음과 같습니다.

internal class Contract 
{ 
    public string Name { get; set; } 
    public ObservableCollection<Commission> Commissions { get; set; } 
} 

internal class Commission 
{ 
    public string Id { get; set; } 
} 

FYI - 실제로 모델이 더 복잡합니다. 내 클래스에는 표시된 것보다 많은 멤버가 포함되어 있으며 생성자가 있으며 INotifyPropertyChanged를 구현합니다.

제 테스트에서 두 개의 Commission 객체를 Contract 객체에로드합니다. 목록 상자가 예상대로 작동합니다. 계약서에있는 각 Commission 객체의 ID를 볼 수 있습니다. TreeView가 작동하지 않습니다. 각 Commission Id가 나열 될 것으로 예상되는 TreeView 컨트롤에 "System.Windows.HierarchicalDataTemplate"문자열을 반환합니다.

나는 other postsMSDN을 사용하지 않았습니다. 나는 너의 도움에 감사 할거야!

+0

당신이 당신의'''. 콘솔에서 볼 수있는 몇 가지 바인딩 오류에 대해 알려주십시오. – Kcvin

+0

같은 결과; TreeView 컨트롤에서 "System.Windows.HierarchicalDataTemplate"문자열을 반환합니다. 오류 메시지가 표시되지 않습니다. –

답변

0

내가 말할 수있는 것은 XAML에서 TreeView을 올바르게 사용하지 않는다는 것입니다. 이 항목의 템플릿을 설정할 here 같이 당신은 TreeView.Resources 수준에서 HierarchicalDataTemplate을 넣고 ItemsSource

을 할당해야합니다.

봅니다 대신이 같은 일을 할 수 있습니다 :

<TreeView ItemsSource="{Binding Contracts}"> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type m:Contract}" 
            ItemsSource="{Binding Commissions}"> 
      <TextBlock Text="{Binding Name}" /> 
     </HierarchicalDataTemplate> 
     <HierarchicalDataTemplate DataType="{x:Type m:Commission}" 
            ItemsSource="{Binding Children}"> 
      <TextBlock Text="{Binding Id}" /> 
     </HierarchicalDataTemplate> 
    </TreeView.Resources> 
</TreeView> 

나는 개인적으로 이런 식으로 그것을 할 - RadTreeView 사용 :

<telerik:RadTreeView.ItemTemplate> 
    <HierarchicalDataTemplate DataType="{x:Type vm:BaseType}" 
           ItemsSource="{Binding Children}"> 
     <TextBlock Text="{Binding Title}" /> 
    </HierarchicalDataTemplate> 
</telerik:RadTreeView.ItemTemplate> 
+0

감사합니다. 그러나이 문제가 완전히 해결되지는 않습니다. 나는 후속 질문을 게시 할 것이다. –

+0

'DataType = "{x : Type m : Commission}"ItemsSource = "{Binding Products}"를 지정해야합니다. 그러면 x : Type m : Product에 대해 다른 HiearchicalDataTemplate을 추가해야합니다. – Kcvin

+0

안녕하세요, NETscape. 만약 당신이 노력하고 내 후속 질문에 답변, 여기있어 : [링크] (http://stackoverflow.com/questions/21735680/wpf-treeview-databinding-followupup) –