我想知道如何在我的解决方案中实现干净的架构。我有项目:核心(模型、消息、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 层中?
您添加 CommunityToolkit MAUI,并使用 EventToCommandBehavior。
https://learn.microsoft.com/en-us/dotnet/communitytoolkit/maui/behaviors/event-to-command-behavior
两件重要的事情:
EventArgsConverter
将 EventArgs 转换为传递给命令的另一种类型。这是我一般使用事件的方式。
(接下来是我的看法) 我严重怀疑这个事件有任何理由变成命令。这看起来像是一个机械代码,如果有的话 - 属于视图本身。