Получить SelectedItem из TreeView?

Кто-нибудь знает, как я могу получить SelectedItem (не заголовок) из TreeView?
Вот мой код:

<TreeView Name="treeView1" DataContext="{Binding Path=PresentationsViewModel}" Grid.Column="1" >
    <TreeViewItem IsExpanded="True" Header="Objects-A-List" DisplayMemberPath="Name" ItemsSource="{Binding Path=MyItem.ListA}"></TreeViewItem>
    <TreeViewItem IsExpanded="True" Header="Objects-B-List" DisplayMemberPath="Name" ItemsSource="{Binding Path=MyItem.ListB}"></TreeViewItem>
    <TreeViewItem IsExpanded="True" Header="Objects-C-List" DisplayMemberPath="Name" ItemsSource="{Binding Path=MyItem.ListC}"></TreeViewItem>
</TreeView>

Обратите внимание, что есть 3 разных списка, содержащих 3 разных типа объектов. Мне бы очень помогло иметь что-то вроде:

public Object SelectedObject
{
    set { _selectedObject = value; RunMyMethod(); RaisePropertyChanged("SelectedObject"); }
}  

Ответ 1

Хорошо, я знаю, что это старый вопрос и, возможно, он мертв, но, как Чарли, это правильно. Это то, что также может быть использовано в коде. Вы могли бы сделать, например:

<ContentPresenter Content="{Binding ElementName=treeView1, Path=SelectedItem}" />

Который покажет выбранный пункт. Вы можете добавить стиль или DataTemplate к этому или использовать DataTemplate по умолчанию для объекта, который вы пытаетесь показать.

Ответ 2

Шаг 1 Установите NuGet: Install-Package System.Windows.Interactivity.WPF

Шаг 2 В теге Window добавьте: xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

Шаг 3 В TreeView добавьте:

    <TreeView Name="treeView1" ... >
         <i:Interaction.Triggers>
              <i:EventTrigger EventName="SelectedItemChanged">
                   <i:InvokeCommandAction Command="{Binding SelectedItemChangedCommand}" CommandParameter="{Binding ElementName=treeView1, Path=SelectedItem}"/>
              </i:EventTrigger>
          </i:Interaction.Triggers>
   ...
   </TreeView>

Шаг 4 В ViewModel добавьте:

        private ICommand _selectedItemChangedCommand;
        public ICommand SelectedItemChangedCommand
        {
            get
            {
                if (_selectedItemChangedCommand == null)
                    _selectedItemChangedCommand = new RelayCommand(args => SelectedItemChanged(args));
                return _selectedItemChangedCommand;
            }
        }

        private void SelectedItemChanged(object args)
        {
            //Cast your object
        }

Ответ 3

Возможно, я неправильно понял ваш вопрос, но

treeView1.SelectedItem

Должен работать.