Получить SelectedItem из TreeView? - PullRequest
1 голос
/ 06 августа 2009

Кто-нибудь знает, как я могу получить SelectedItem (не Header) из 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"); }
}  

Ответы [ 3 ]

4 голосов
/ 29 сентября 2015

Шаг 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 голосов
/ 05 июля 2010

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

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

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

0 голосов
/ 06 августа 2009

Может быть, я неправильно понял ваш вопрос, но,

treeView1.SelectedItem

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

...