Получить 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
Должен работать.