我得到了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
中的不同物体。所以...我如何构建这样的用户界面?
感谢您的回答,但我认为这不会对我有帮助。我也有一个ContentPresenterin这个应用程序绑定到TreeView和SelectedItem属性。我以前的尝试之一是ListViews(没有TreeView),它不能很好地工作。 – 2009-05-29 12:06:25