我已创建了一个树视图,现在我想将标题的名称作为要在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);
}
}
答案 0 :(得分:2)
我不知道您的RelayCommand的实现,但您必须将RelayCommand的commandParameter作为GetItemHeader-Method的参数传递。您正在传递未定义的SelectedItem。 如果您没有任何更改,请执行以下操作:
public EquipmentManagerViewModel()
{
SelectItemCommand = new RelayCommand(tvi => GetItemHeader(((TreeViewItem)tvi).Header.ToString()));
}
然后我会重命名方法,因为它没有做到预期的结果。它没有给你ItemHeader!您提取标题并将其提供给Methode,方法显示一个带有文本作为参数的MessageBox。
修改强>
@almulo的评论引导我进行以下更改:
在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。