在treeviewItems中获取header的名称

本文关键字:header 获取 treeviewItems | 更新日期: 2023-09-27 18:02:05

我已经创建了一个树视图,现在我想获得标题的名称作为一个字符串在ViewModel中使用。命令可以工作,但我无法获得头的名称作为方法中的参数传递。

我如何得到标题的名称,每次我选择一个新的新的treeViewItem?

XAML

 <TreeView Name="EquipmentTreeView">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectedItemChanged">
                <i:InvokeCommandAction 
                     Command="{Binding SelectItemCommand}"
                     CommandParameter="{Binding SelectedItem, ElementName=EquipmentTreeView}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <TreeViewItem Header="Camera">
            <TreeViewItem Header="Digital Camera">                  
            </TreeViewItem >
            <TreeViewItem Header="Film Camera">
                <TreeViewItem Header="35mm Film Sound Camera"></TreeViewItem>
                <TreeViewItem Header="35mm Film MOS Camera"></TreeViewItem>
                <TreeViewItem Header="Film Magazines"></TreeViewItem>
            </TreeViewItem>
               ....

ViewModel(参数不工作)

 public class EquipmentManagerViewModel : NotifyUIBase
{
    public EquipmentManagerViewModel()
    {
        SelectItemCommand = new RelayCommand(() => GetItemHeader(SelectedItem));  
    }
    public RelayCommand SelectItemCommand { get; private set; }
    private void GetItemHeader(string selectedHeader)
    {
        MessageBox.Show(selectedHeader);
    }
}

在treeviewItems中获取header的名称

我不知道你的RelayCommand的实现,但是你必须传递RelayCommand的commandParameter作为你的GetItemHeader-Method的参数。您正在传递一个未定义的SelectedItem。在不修改xaml的情况下,执行以下操作:

public EquipmentManagerViewModel()
{
    SelectItemCommand = new RelayCommand(tvi => GetItemHeader(((TreeViewItem)tvi).Header.ToString()));
}

但是我会重命名方法,因为它没有做预期的事情。它不会给你ItemHeader!您提取Header并将其交给方法,方法将显示一个带有文本作为参数的MessageBox。

编辑

@almulo的注释让我做了以下修改:

@Mike建议的Xaml:

<i:InvokeCommandAction 
    Command="{Binding SelectItemCommand}"
    CommandParameter="{Binding SelectedItem.Header, ElementName=EquipmentTreeView}"/>

和ViewModel中的

public EquipmentManagerViewModel()
{
    SelectItemCommand = new RelayCommand<String>(obj => GetItemHeader(obj.ToString()));
}
public RelayCommand<String> SelectItemCommand { get; private set; }
private void GetItemHeader(string selectedHeader)
{
    MessageBox.Show(selectedHeader);
}
所有基于你的RelayCommand可以处理CommandParameter的事实