【问题标题】:Switch between Views according to TreeView SelectedItem根据TreeView SelectedItem在View之间切换
【发布时间】:2014-02-20 13:42:06
【问题描述】:

我找不到这个问题的解决方案。 我有一个树视图,我正试图到达我单击/双击的位置,它会在窗口的不同部分打开一个视图(假设使用 gridsplitter 并且树在右侧并且通过设置 contentcontrol 内容 DP 会在左侧打开相关视图。

谢谢

【问题讨论】:

  • 你能发布你的树视图的 xaml 代码吗?
  • 真的没关系......它可以是一个带有单个treeviewitem的treeview
  • 您可以使用 tree view.selectedItem,将其转换为您的绑定对象并根据需要使用它。

标签: wpf mvvm treeview prism


【解决方案1】:

我用过 Simplifying the WPF TreeView by Using the ViewModel Pattern 构建我的 Treeview。

我的 xaml 看起来像:

<TreeView ItemsSource="{Binding Parents,IsAsync=True}" Name="tree" SelectedItemChanged="tree_SelectedItemChanged"  Background="Transparent" >
        <TreeView.Resources>
                <HierarchicalDataTemplate DataType="{x:Type local:XMLParentViewModel}"
                                      ItemsSource="{Binding Children}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="500"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition MinHeight="20" />
                        </Grid.RowDefinitions>
                        <TextBlock Text="{Binding ParentDisplayText}" TextWrapping="Wrap"/>
                    </Grid>
                </HierarchicalDataTemplate>

                    <DataTemplate DataType="{x:Type local:XMLChildViewModel}">
                <Grid>

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="500"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition MinHeight="20" />
                    </Grid.RowDefinitions>

                    <TextBlock Text="{Binding ChildDisplayText}" TextWrapping="Wrap" MouseDown="TextBlock_PreviewMouseDown" />
                </Grid >
            </DataTemplate>

        </TreeView.Resources>
    </TreeView>

并且知道选择了什么样的元素:

private void tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        if( tree.SelectedItem.GetType() == typeof(XMLChildViewModel))
            //Do what you need
    }

我可以为您修改此代码,但如果您有更多问题

【讨论】:

  • 我需要在窗口的右侧(例如第二列)有一个内容控件,我会根据所选的 TreeViewItem 将其内容设置为不同的用户控件
  • 使用 tree.SelectedItem 做你想做的事。
【解决方案2】:

clemens 说了什么,但我也很难理解问题/问题是什么?我们可以得到的所有帮助理解您的问题,将使您获得的所有帮助变得更好:)

【讨论】:

  • 我想他是想根据所选项目的类型显示不同的内容。以汽车品牌和车型为例,如果选择品牌,则显示品牌信息,如果选择车型,则显示车型。关于品牌和型号的信息可以是2个差异控件。
【解决方案3】:

我认为这会有所帮助。这里是 XAML 代码...

<TreeView Name="treenavigator" Grid.Row="1">
          <TreeViewItem DisplayMemberPath="Item" Header="Item" Name="navitem">
                <TreeViewItem Header="Add Item" Name="additem" />
                <TreeViewItem Header="Update Item Details" Name="updateitem" />
                <TreeViewItem Header="View Item Details" Name="viewitemdetails" />
                <TreeViewItem Header="Delete Items" Name="deleteitem" />
          </TreeViewItem> 
</TreeView>

这里是示例 C# 代码。 grdForm 是我加载用户控制器的主窗口中的网格,AddItem 是我加载到 grdForm 中的用户控制器。

private void navitem_Selected(object sender, RoutedEventArgs e)
{
      if (treenavigator.SelectedValue.ToString() == additem.ToString())
      {
            AddItem ItemView = new AddItem();
            grdform.Children.Add(ItemView);
       }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    相关资源
    最近更新 更多