2012-12-12 29 views
2

我現在正在使用TreeView。正如你可以看到CurrentMediumObjectivesChildrenObjective是相同的對象類型,稱爲Objective如何在樹視圖中設置不同的樣式控制級別1和2?

這類有一個叫做Level屬性,在ChildrenObjective其中被設置爲1和ChildrenObjective被設置爲2

我想設置不同DataTemplate取決於Level

<TreeView ItemsSource="{Binding CurrentMediumObjectives}" 
     Margin="0,40,0,0">  
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate ItemsSource="{Binding ChildrenObjective}"> 
       <TextBlock FontWeight="Bold"> 
        <Run Text="Objective " /> 
        <Run Text="{Binding Level}" /> 
       </TextBlock> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
    </TreeView> 

我很困惑如果應該使用DataTemplateSelector或DataTrigger。 在此先感謝。

回答

2

也許你可以使用Trigger來顯示每個模板。

財產以後這樣的,也許:

<TreeView ItemsSource="{Binding CurrentMediumObjectives}" Margin="0,40,0,0"> 
      <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate ItemsSource="{Binding ChildrenObjective}"> 
        <Grid> 
         <!--Data template for level 1--> 
         <TextBlock x:Name="level1" FontWeight="Bold"> 
          <Run Text="Objective " /> 
          <Run Text="{Binding Level}" /> 
         </TextBlock> 

         <!--Data template for level 2--> 
         <TextBlock x:Name="level2" FontWeight="Bold" Foreground="Red"> 
          <Run Text="Objective " /> 
          <Run Text="{Binding Level}" /> 
         </TextBlock> 
        </Grid> 

        <HierarchicalDataTemplate.Triggers> 
         <DataTrigger Binding="{Binding Level}" Value="1"> 
          <Setter TargetName="level1" Property="Visibility" Value="Visible" /> 
          <Setter TargetName="level2" Property="Visibility" Value="Collapsed" /> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding Level}" Value="2"> 
          <Setter TargetName="level2" Property="Visibility" Value="Visible" /> 
          <Setter TargetName="level1" Property="Visibility" Value="Collapsed" /> 
         </DataTrigger> 
        </HierarchicalDataTemplate.Triggers> 
       </HierarchicalDataTemplate> 
      </TreeView.ItemTemplate> 
     </TreeView> 

模型(猜)

public class Objective 
{ 
    public int Level { get; set; } 
} 

public class CurrentMediumObjectives : Objective 
{ 
    public ObservableCollection<ChildrenObjective> ChildrenObjective { get; set; } 
} 

public class ChildrenObjective : Objective 
{ 
} 

結果: enter image description here

+0

增加的更好的例子:) –

+0

感謝。你的回答幫助了我很多! :) –

相關問題