首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinUI支持MVVM吗?

WinUI支持MVVM吗?
EN

Stack Overflow用户
提问于 2022-09-08 00:12:18
回答 1查看 123关注 0票数 0

单击ListViewItem并让它在视图模型中执行某些操作是最基本的命令,但我在ListView或ListViewItem上找不到任何可绑定的属性。至少毛伊岛有手势行为。这就是它的工作方式:

代码语言:javascript
复制
    <ListView DataContext="{x:Bind ViewModel.FolderViewModel}"
              ItemsSource="{x:Bind Items}"
              Tapped={x:Bind Tapped}">
    </ListView>

求你了我错过了什么。还有另一种更聪明的本土化的方法吗?如果是的话,那是什么。如果没有,为什么不支持MVVM?

是的,我知道有外包装。我觉得我刚上了一辆新汽车,没有方向盘。如果驾驶是如此重要的概念,那么方向盘在哪里?如果汽车的制造商发明了一种自动驾驶汽车,那么我需要学习这种新的模式。如果制造商只是说“去AutoZone买一个方向盘”,那么这只是一个糟糕的设计。

EN

回答 1

Stack Overflow用户

发布于 2022-09-08 01:30:45

您可以应用MVVM设计。

有些控件(如Button)允许直接绑定Command,但对于ListView,需要将event转换为Command。这在WPFUWP中几乎是一样的。

NuGet软件包

  • CommunityToolkit.Mvvm
  • Microsoft.Xaml.Behaviors.WinUI.Managed

.xaml

代码语言:javascript
复制
<Window
    x:Class="WinUI3App1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:core="using:Microsoft.Xaml.Interactions.Core"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <StackPanel>
        <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>
    </StackPanel>

</Window>

.xaml.cs

代码语言:javascript
复制
using Microsoft.UI.Xaml;
namespace WinUI3App1;

public sealed partial class MainWindow : Window
{
    public MainWindow()
    {
        this.InitializeComponent();
    }

    public MainWindowViewModel ViewModel { get; } = new();
}

ViewModel.cs

代码语言:javascript
复制
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace WinUI3App1;

public partial class MainWindowViewModel : ObservableObject
{
    [RelayCommand]
    private void SelectItem(object param)
    {
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73642552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档