根据TreeView SelectedItem在视图之间切换

时间:2014-02-20 13:42:07

标签: wpf mvvm treeview prism

我无法找到解决此问题的方法。 我有一个树视图,我正试图到达我点击/双击的点,它打开窗口不同部分的视图(假设使用网格分析器,树在右边,通过设置内容控制内容DP),左侧将打开相关视图。

感谢

3 个答案:

答案 0 :(得分: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
    }

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

答案 1 :(得分:0)

克莱门斯说了什么,但我也很难理解问题/问题是什么?我们可以帮助您理解您的所有问题,让您获得更好的帮助:)

答案 2 :(得分:0)

我认为这会有所帮助。这里是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);
       }
}