WinUI是否支持MVVM?ListView如何绑定视图模型命令?
WinUI ListView 点击Item触发ViewModel命令的原生实现
原生实现方式1:使用官方行为库(推荐)
WinUI官方提供了Microsoft.Xaml.Behaviors.WinUI.Managed NuGet包,这是微软维护的官方扩展,不属于第三方工具范畴。通过它可以实现事件到命令的绑定,步骤如下:
- 安装上述NuGet包
- 在XAML中添加命名空间:
xmlns:interactivity="using:Microsoft.Xaml.Interactivity" xmlns:core="using:Microsoft.Xaml.Interactions.Core"
- 给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
相关产品推荐
相关产品推荐

