You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI是否支持MVVM?ListView如何绑定视图模型命令?

WinUI ListView 点击Item触发ViewModel命令的原生实现

原生实现方式1:使用官方行为库(推荐)

WinUI官方提供了Microsoft.Xaml.Behaviors.WinUI.Managed NuGet包,这是微软维护的官方扩展,不属于第三方工具范畴。通过它可以实现事件到命令的绑定,步骤如下:

  1. 安装上述NuGet包
  2. 在XAML中添加命名空间:
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
  1. 给ListView配置行为绑定命令:
<ListView DataContext="{x:Bind ViewModel.FolderViewModel}"
          ItemsSource="{x:Bind Items}"
          IsItemClickEnabled="True">
    <interactivity:Interaction.Behaviors>
        <core:EventTriggerBehavior EventName="ItemClick">
            <core:InvokeCommandAction Command="{x:Bind Tapped}"
                                      CommandParameter="{Binding}"/>
        </core:EventTriggerBehavior>
    </interactivity:Interaction.Behaviors>
</ListView>

需要开启IsItemClickEnabled="True",CommandParameter会把点击的Item对象传递给ViewModel的Tapped命令。

原生实现方式2:纯代码后台中转(无依赖包)

如果完全不想引用任何包,可以在页面代码后台中转事件,调用ViewModel的命令:
XAML部分:

<ListView DataContext="{x:Bind ViewModel.FolderViewModel}"
          ItemsSource="{x:Bind Items}"
          IsItemClickEnabled="True"
          ItemClick="ListView_ItemClick">
</ListView>

代码后台部分:

private void ListView_ItemClick(object sender, ItemClickEventArgs e)
{
    var listView = (ListView)sender;
    var viewModel = (FolderViewModel)listView.DataContext;
    viewModel.Tapped?.Execute(e.ClickedItem);
}

关于WinUI对MVVM的支持

WinUI本身是支持MVVM模式的,只是没有给ListView等控件直接内置可绑定的命令属性。这种设计是为了保持控件的轻量化,将交互逻辑与控件本身解耦,官方通过行为库提供了标准化的扩展方式,并非设计缺陷。官方行为库属于WinUI生态的官方补充,和你所说的“第三方工具”有本质区别。

内容的提问来源于stack exchange,提问作者user365462

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:35:24