【问题标题】:WPF ListBoxItem EventsWPF ListBoxItem 事件
【发布时间】:2018-01-15 21:58:00
【问题描述】:

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

我有一个ListBox(包含股票投资组合的详细信息)。列表框项使用网格来显示投资组合的属性。 Source 是 View Model 中的投资组合列表。

ListBox is multiselect - when selection changes, a list of the constituents of the selected portfolios is re-populated.

我想要做的是在 listboxitem 上放置一个按钮(或菜单或其他)以显示可能的操作列表(Trade、Unitise、Delete 等)。

选择一个操作后,我需要针对相应的投资组合执行该操作。理想情况下,我希望这些操作对选定和未选定的项目都可用。

我可以处理该事件,但如何检测用户选择了哪个项目(投资组合)?我看过 GotFocus() 但它似乎没有触发。

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

【问题讨论】:

    标签: wpf mvvm listboxitem


    【解决方案1】:

    对我来说,这里的解决方案,正如你提到的 MVVM,是让 ListBox 由 ViewModel 的集合填充,例如,ObservableCollection<PortfolioViewModel> 之类的东西。

    然后只需将 ButtonCommand 属性绑定到 ViewModel 上的 ICommand 即可执行您需要做的任何工作。

    【讨论】:

    • 我想我明白你来自哪里。目前,列表框绑定到 Portfolio 类的集合,该集合仅包含属性(Id、Name、Value ....),但没有理由该类不能同时包含方法或命令。我把它转起来,看看它会不会飞。谢谢,克里斯。
    【解决方案2】:

    我可以处理该事件,但如何检测用户选择了哪个项目(投资组合)?我看过GotFocus(),但它似乎没有触发。

    您可以将被点击的ButtonDataContext 投射到ListBox 中的对应对象,例如:

    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...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多