[英]MVVM - select item in TreeView and show its properties on a ListView using binding
我是 MVVM 的新手。 我创建了一个 TreeView 具有 3 个级别的层次结构:level1:Program,level2:Action,level3:Position。 我还在 TreeView 下创建了一个 ListView(参见 xaml)。 现在 ListView 的项目没有绑定到任何东西(名称“Type”、“Speed”只是占位符。)
当从 TreeView 中的 level2 (Action) 中选择一个项目时,我希望看到它的属性(类型、速度)出现在下面的 ListView 中。
有没有办法通过仅更改视图(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>
这是 WPF 中的 treeview 的一个众所周知的问题。 您必须为树中的每个 object 创建一个“已选择”属性,以便您知道用户选择了什么,然后您可以在列表视图中显示选定的 object。 自从我玩 treeview 以来已经有一段时间了,但这里有一些我认为过去对我有帮助的链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.