架构干净的Mvvm,如何处理MAUI中的事件?

问题描述 投票:0回答:1

我想知道如何在我的解决方案中实现干净的架构。我有项目:核心(模型、消息、ViewModels)、移动(毛伊岛项目 - >视图)、共享(Dto 项目)。我有:

<PanGestureRecognizer PanUpdated="PanGestureRecognizer_PanUpdated"/>
在我的视图中,我通过以下方式将其传递给
MyViewModel

private void PanGestureRecognizer_PanUpdated(object sender, PanUpdatedEventArgs e)
{
    var panUpdatedCommand = ((MyViewModel)BindingContext).PanUpdatedCommand;
    panUpdatedCommand.Execute(e);
}

这里我传递了

EventArgs: PanUpdatedEventArgs
,这取决于毛伊岛。

那么我就不能像这样在

RelayCommand
中使用
MyViewModel

 [RelayCommand]
 private void PanUpdated(PanUpdatedEventArgs e)
 {
     switch (e.StatusType)
     {
         case GestureStatus.Started:
             ...

         case GestureStatus.Running:
             ...

         case GestureStatus.Canceled:
             ...

         case GestureStatus.Completed:
             ...
     }
 }

因为

PanUpdatedEventArgs
GestureStatus
来自毛伊岛图书馆,但由于干净的架构,我的
MyViewModel
应该是独立的。我怎样才能做到这一点?或者我应该将 ViewModel 文件夹放在 Mobile 层中?

mvvm maui clean-architecture
1个回答
0
投票

您添加 CommunityToolkit MAUI,并使用 EventToCommandBehavior。

https://learn.microsoft.com/en-us/dotnet/communitytoolkit/maui/behaviors/event-to-command-behavior

两件重要的事情:

  1. 在 XAML(您的视图)中,您绑定到您的命令。您不必在 .cs 中编写代码,也不必从 ViewModel 中调用方法。
  2. 当您需要参数时,可以使用
    EventArgsConverter
    将 EventArgs 转换为传递给命令的另一种类型。

这是我一般使用事件的方式。

(接下来是我的看法) 我严重怀疑这个事件有任何理由变成命令。这看起来像是一个机械代码,如果有的话 - 属于视图本身。

© www.soinside.com 2019 - 2024. All rights reserved.