【问题标题】:MVVM - select item in TreeView and show its properties on a ListView using bindingMVVM - 在 TreeView 中选择项目并使用绑定在 ListView 上显示其属性
【发布时间】: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 属性,您可以使用它来获取信息。

标签: c# wpf mvvm


【解决方案1】:

这是 WPF 中树视图的一个众所周知的问题。您必须为树中的每个对象创建一个“已选择”属性,以便您知道用户选择了什么,然后您可以在列表视图中显示所选对象。 我已经有一段时间没有玩树视图了,但这里有一些我认为过去对我有帮助的链接。

Data binding to SelectedItem in a WPF Treeview

WPF MVVM TreeView SelectedItem

【讨论】:

    猜你喜欢
    • 2016-04-25
    • 2020-06-19
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多