从 TreeView 获取 SelectedItem?

Jos*_*nel 2 c# wpf treeview xaml selecteditem

有谁知道如何从 TreeView 获取 SelectedItem(不是标题)?
这是我的代码:

<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>
Run Code Online (Sandbox Code Playgroud)

请注意,有 3 个不同的列表,包含 3 个不同的对象类型。拥有以下内容对我有很大帮助:

public Object SelectedObject
{
    set { _selectedObject = value; RunMyMethod(); RaisePropertyChanged("SelectedObject"); }
}  
Run Code Online (Sandbox Code Playgroud)

Ing*_*als 5

好的,我知道这是一个老问题,可能已经死了,但查理说得对。这也可以在代码中使用。你可以做例如:

<ContentPresenter Content="{Binding ElementName=treeView1, Path=SelectedItem}" />
Run Code Online (Sandbox Code Playgroud)

这将显示所选项目。您可以向其中添加样式或 DataTemplate,或者将默认 DataTemplate 用于您尝试显示的对象。


小智 5

第 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>
Run Code Online (Sandbox Code Playgroud)

第 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
        }
Run Code Online (Sandbox Code Playgroud)