【问题标题】:WinUI 3 ListView - how to handle selected item with mvvm C++WinUI 3 ListView - 如何使用 mvvm C++ 处理选定的项目
【发布时间】:2023-01-25 16:01:03
【问题描述】:

我正在为我的 WinRT C++ 桌面应用程序寻找一个解决方案来处理我的视图模型中的列表视图项选择。我可以绑定到 SelectionChanged 事件

SelectionChanged="{x:Bind MainViewModel.OnClick}"  

但我不知道是谁点击的。

C# 解决方案使用xmlns:interactivity="using:Microsoft.Xaml.Interactivity"

    <ListView>
        <interactivity:Interaction.Behaviors>
            <core:EventTriggerBehavior EventName="SelectionChanged">
                <core:InvokeCommandAction Command="{x:Bind ViewModel.SelectItemCommand}" />
            </core:EventTriggerBehavior>
        </interactivity:Interaction.Behaviors>
        <ListViewItem Content="Item #1" />
        <ListViewItem Content="Item #2" />
    </ListView>

C++ 有类似的东西吗?

【问题讨论】:

  • “我不知道是谁点击了”- 我不太明白。你问的是哪个项目引发了SelectionChanged事件?在这种情况下,可以通过传递给您的 OnClick 委托的 SelectionChangedEventArgs 获得该信息。

标签: c# c++ xaml c++-winrt


【解决方案1】:

您可以使用 WRL 库实现:

#include <wrl.h>

#include <windows.ui.xaml.controls.h>

using namespace Microsoft::WRL;
using namespace Microsoft::WRL::Wrappers;
using namespace ABI::Windows::UI::Xaml;
using namespace ABI::Windows::UI::Xaml::Controls;

class MainViewModel {
  public: MainViewModel() {
    // Register the SelectionChanged event
    ComPtr < IListView > listView;
    //Get the ListView control 
    //listView = ...
    EventRegistrationToken token;
    listView -> add_SelectionChanged(Callback < ITypedEventHandler < ListView * , SelectionChangedEventArgs * >> (
      this, & MainViewModel::OnClick).Get(), & token);
  }

  void OnClick(IListView * sender, ISelectionChangedEventArgs * args) {
    // do your logic here
  }
};

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 2022-10-09
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2020-10-21
    • 2022-10-04
    • 2011-03-06
    • 2020-11-15
    相关资源
    最近更新 更多