TreeView
があり、階層型ではないネストされたデータを表示したいと考えています。第1レベルのデータはTaskViewModel
、第2レベルのデータはArtifactViewModel
です。私はTaskViewModel
を表すGroupBox
の内部にArtifactViewModel
の水平を入れたいと思います。 私は別のアプローチを試みたが、これが私の最後のいずれかになります。そのArtifactViewModel
sは縦示しているほか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
をクリックすると、ListView
がこのイベントを通知するため、tvTasks.SelectedItemは変更されません。私はこのアプローチが賢明ではないことを知っていますが、それは単なる試みです。
私はthis articleを見ましたが、私はTreeView
に入れたいさまざまなオブジェクトをどのように処理するのか分かりません。だから...私はどのようにそのようなUIを構築するのですか?
あなたの答えをありがとうが、私はそれが私を助けるとは思わない。私はTreeViewとSelectedItemプロパティにバインドされているこのアプリケーションのContentPresenterinも持っています。私の以前の試みの1つはListView(TreeViewなし)であり、うまくいきませんでした。 –
幸運。しかし、ネストされた選択コントロールを使用する限り、問題にぶつかると思います。厳密に1つの選択コントロールが必要になり、DataTemplatesを使用して配置/レイアウト作業を行います。 – micahtan