1

我有一个TreeView并且想要显示嵌套的数据(不是分层的)。第一级数据被称为TaskViewModel,第二级数据是ArtifactViewModel。我想要ArtifactViewModela 内的水平线,GroupBox它代表TaskViewModel. 我尝试了不同的方法,这是我的最后一个:

<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>

这看起来很像我想要的,除了ArtifactViewModels 是垂直显示的。如果我点击ArtifactViewModeltvTasks.SelectedItem 不会改变,因为ListView处理这个事件。我知道这种方法不是最聪明的,但这只是一种尝试。
我看了这篇文章,但我不知道如何处理我想放入的不同对象TreeView。那么......我如何构建这样的用户界面?

4

1 回答 1

0

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

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

现在棘手的部分是玩弄你想如何布置物品。看看 Bea Stollnitz 的示例她将 ListBox 重绘为 Canvas。您可以在 ItemsPanelTemplate 是 Canvas 的情况下执行类似的操作,然后计算 x,y 坐标。或者,您可以使用 Grid,并确定 Grid.Row 和 Grid.Column 值。

于 2009-05-29T07:45:59.710 回答