2014-02-20 2 views
0

Я не могу найти решение этой проблемы. У меня есть древовидная структура, и я пытаюсь добраться до точки, где я нажимаю/двойным щелчком, и открывается вид на другую часть окна (скажем, с помощью gridsplitter и дерева справа и соответствующее представление откроется слева, установив контент contentcontrol DP).Переключение между представлениями в соответствии с TreeView SelectedItem

благодаря

+0

Можете ли вы разместить свой код xaml для древовидной структуры, пожалуйста? –

+0

действительно не имеет значения ... это может быть древовидная структура с одним treeviewitem – user1531186

+0

Вы можете использовать tree view.selectedItem, применить его к вашему объекту и использовать его как хотите. –

ответ

0

Что Клеменс сказал, но у меня трудно понять, в чем проблема/вопрос? Вся помощь, мы можем получить понимание вашего вопроса, будет делать все поможет вам еще лучше :)

+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 
    } 

я могу адаптировать этот код для вас, но если у вас есть вопросы

+0

Мне нужно, чтобы в правой части окна (например, во втором столбце) будет элемент управления contentcontrol, и я настрою его содержимое на другой пользовательский контроль в соответствии с выбранным деревом дерева TreeViewItem – user1531186

+0

. Выбранный вами пользователь делает то, что вы хотите. –

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); 
     } 
} 
Смежные вопросы