【发布时间】:2019-11-21 23:24:07
【问题描述】:
我是 MVVM 的新手。我创建了一个具有 3 级层次结构的 TreeView:level1:Program,level2:Action,level3:Position。我还在 TreeView (see xaml) 下创建了一个 ListView。现在 ListView 的项目没有绑定到任何东西(名称“Type”、“Speed”只是占位符。)
当从 TreeView 中的 level2 (Action) 中选择一个项目时,我希望看到它的属性(类型、速度)出现在下面的 ListView 中。
有没有办法通过仅更改 View (xaml) 而不使用 ViewModel 中的代码来做到这一点?也许有一种方法可以使用某个绑定,当按下 TreeView 中的项目时可以更改它?
xaml(模型):
<TreeView
Grid.Row="0"
x:Name="MainTreeView"
HorizontalAlignment="Stretch"
Margin="10"
VerticalAlignment="Stretch"
ItemsSource="{Binding Programs}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Actions}" DataType="{x:Type VM:ProgramVM}">
<Label Content="{Binding ProgramName}"/>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Poses}" DataType="{x:Type VM:ActionVM}">
<Label Content="{Binding Actiontype}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate DataType="{x:Type VM:PositionVM}">
<Label Content="{Binding PosName}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<ListView Grid.Row="1" Margin="10" Name="lvUsers">
<ListView.View>
<GridView>
<GridViewColumn Header="Type" Width="100" DisplayMemberBinding="{Binding Type}" />
<GridViewColumn Header="Speed" Width="100" DisplayMemberBinding="{Binding Speed}" />
</GridView>
</ListView.View>
</ListView>
【问题讨论】:
-
您想显示所选项目的详细信息吗?如果你想要一个项目,那么
ListView是一种矫枉过正。使用容器(Grid 或 StackPanel)并为 Type 和 Speed 添加TextBlocks。顺便说一句,TreeView 有一个SelectedItem 属性,您可以使用它来获取信息。