2009-05-26 75 views
1

我得到了TreeView并且想要显示嵌套的数据(不是分层的)。第一级数据称为TaskViewModel,第二级数据为ArtifactViewModel。我希望水平在GroupBox内,代表TaskViewModel。 我尝试不同的方法,这是我最后一个:我是否必须构建ControlTemplate?还是有其他选择吗?

<TreeView Name="tvTasks" ItemsSource="{Binding Tasks}"> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type vm:TaskViewModel}"> 
      <GroupBox Header="{Binding Name, UpdateSourceTrigger=PropertyChanged}"> 
       <StackPanel Orientation="Vertical"> 
        <ListView ItemsSource="{Binding Children}"/> 
        <TextBlock Text="{Binding Description, UpdateSourceTrigger=PropertyChanged}" TextWrapping="Wrap"/> 
       </StackPanel> 
      </GroupBox> 
     </HierarchicalDataTemplate> 
     <DataTemplate DataType="{x:Type vm:ArtifactViewModel}"> 
      <Border Background="{Binding Type,Converter={StaticResource Type2Background}}" 
        Margin="5" BorderBrush="Black" BorderThickness="2" CornerRadius="2"> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="80"/> 
         <RowDefinition Height="20"/> 
        </Grid.RowDefinitions> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="100"/> 
        </Grid.ColumnDefinitions> 
        <TextBlock Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" 
           TextAlignment="Center" Background="Black" Foreground="White" 
           Opacity="0.75" Grid.Column="0" Grid.Row="1"/> 
       </Grid> 
      </Border> 
     </DataTemplate>           
    </TreeView.Resources> 
</TreeView> 

这看起来很像我想要什么,除此之外ArtifactViewModel s的图示的垂直。如果我点击ArtifactViewModel,则tvTasks.SelectedItem不会更改,因为ListView支持此事件。我知道这种方法不是最聪明的,但这只是一个尝试。
我看着this article,但我不知道如何处理我想要放入TreeView中的不同物体。所以...我如何构建这样的用户界面?

回答

0

您遇到的主要问题是您嵌套多个控件,每个控件都有自己的选定项目。

如果您打算将数据显示为嵌套但不分层,请不要打扰使用TreeView。如果您希望在任何给定的时间点都可以选择一个项目,请改用ListBox。

现在棘手的部分是玩弄你想如何摆放项目。看看Bea Stollnitz的示例here,她将​​ListBox重新绘制为Canvas。您可以在ItemsPanelTemplate是Canvas的地方做类似的事情,并计算x,y坐标。或者,您可以使用网格,并确定Grid.Row和Grid.Column的值。

+0

感谢您的回答,但我认为这不会对我有帮助。我也有一个ContentPresenterin这个应用程序绑定到TreeView和SelectedItem属性。我以前的尝试之一是ListViews(没有TreeView),它不能很好地工作。 – 2009-05-29 12:06:25

相关问题