WPF ListBoxItem事件

WPF ListBoxItem事件,wpf,mvvm,listboxitem,Wpf,Mvvm,Listboxitem,其中一个问题是:“为什么这么难?” 我有一个列表框(包含股票投资组合的详细信息)。列表框项使用网格显示投资组合的属性。源是视图模型中的投资组合列表 ListBox为多选-当选择更改时,将重新填充所选投资组合的组成部分列表 我想做的是在listboxitem上放置一个按钮(或菜单或任何东西),以显示可能的操作列表(交易、合并、删除等) 当一个动作被选中时,我需要对相应的公文包执行该动作。理想情况下,我希望这些动作对选中和未选中的项目都可用 我可以处理该事件,但如何检测用户选择的项目(公文包)?我已

其中一个问题是:“为什么这么难?”

我有一个
列表框
(包含股票投资组合的详细信息)。列表框项使用网格显示投资组合的属性。源是视图模型中的投资组合列表

ListBox
为多选-当选择更改时,将重新填充所选投资组合的组成部分列表

我想做的是在listboxitem上放置一个按钮(或菜单或任何东西),以显示可能的操作列表(交易、合并、删除等)

当一个动作被选中时,我需要对相应的公文包执行该动作。理想情况下,我希望这些动作对选中和未选中的项目都可用

我可以处理该事件,但如何检测用户选择的项目(公文包)?我已经查看了GotFocus(),但它似乎没有启动


换句话说,如果Listboxitem中的一个控件触发了一个事件,那么该事件如何“知道”是哪个
Listboxitem
引发了它?

对于我来说,这里的解决方案,正如您提到的MVVM,应该是让
ListBox
由一组视图模型填充,例如
ObservableCollection
之类的东西

然后将
按钮的
命令
属性绑定到ViewModel上的
ICommand
,该命令执行您需要执行的任何工作

我可以处理该事件,但如何检测用户选择的项目(公文包)?我已经查看了
GotFocus()
,但它似乎没有触发

您可以将单击的
按钮的
DataContext
强制转换到te
列表框中的相应对象,例如:

private void DeleteButton_Clicked(object sender, RoutedEventArgs e)
{
    Button deleteButton = sender as Button;
    var portfolio = deleteButton.DataContext as Portfolio; //or whatever your type is called

    //access any members of the portfolio...
}

我想我知道你是从哪里来的。目前listbox绑定到公文包类的一个集合,它只包含属性(Id、名称、值…),但没有理由该类不能包含方法或命令。我会把它旋转起来,看看它是否会飞起来。谢谢,Chris。