我有一个Obseravable Collection
个项目。该集合显示在树视图中。我想使用上下文菜单从集合中删除一个Item。我不知道怎么办。
例如,假设我有4个treeviewitems(这意味着我在Obseravable Collection
中有4个项目)现在,用户想要删除第二个项目,他右键单击第二个treeviewitem,上下文菜单是打开并按下“删除..”如何识别要从集合中删除的项目? (我正在使用Command
)
上下文菜单如下所示:
<ContextMenu x:Key="RemoveItemMenu">
<MenuItem Header="Remove..." Command="RemoveItem"/>
</ContextMenu>
将要执行的命令功能:
private void RemoveItemExcecute()
{
//Removing the clicked Item out of the collection
}
答案 0 :(得分:1)
您可以向CommandParameter
添加MenuItem
。这样,您就可以将要删除的项目传递给命令。
<ContextMenu x:Key="RemoveItemMenu">
<MenuItem Header="Remove..." Command="RemoveItem" CommandParameter="{Binding}" />
</ContextMenu>
您可能希望修改绑定以传递所需的信息。然后,当您处理命令时,您将可以使用该信息:
private void RemoveItemExcecute(object param)
{
// "param" is the command parameter passed to the command.
MyItem item = (MyItem)param;
MyItemCollection.Remove(item);
}
答案 1 :(得分:0)
我会参考this answer,其中介绍了如何使用行为向SelectedItem
添加TreeView
字段。
从那里你可以在ViewModel的RemoveItemExecute
方法中引用SelectedTreeItem。
<强> XAML:强>
<TreeView ItemsSource="{Binding MyCollection}">
<e:Interaction.Behaviors>
<behaviours:BindableSelectedItemBehavior SelectedItem="{Binding MySelectedItem, Mode=TwoWay}" />
</e:Interaction.Behaviors>
</TreeView>
<强> C#:强>
public ObservableCollection<MyObject> MyCollection { get; set; }
public MyObject MySelectedItem { get; set; } // You'll want to use INotifyPropertyChanged magic here
private void RemoveItemExcecute()
{
MyCollection.Remove(MySelectedItem);
}
另一种选择是使用CommandParameter
将MySelectedItem
传递给该函数。
<强> XAML:强>
<ContextMenu x:Key="RemoveItemMenu">
<MenuItem Header="Remove..." Command="RemoveItem" CommandParameter="{Binding MySelectedItem}"/>
</ContextMenu>
<强> C#:强>
private void RemoveItemExcecute(object param)
{
var selectedItem = (MyObject)param;
MyCollection.Remove(selectedItem);
}