在Xamarin.Forms中为按钮选择处理程序或命令的最佳实践

时间:2019-07-12 04:45:22

标签: c# mvvm xamarin.forms

我是Xamarin的新手。通过学习MVVM模式,我有了用命令映射按钮并在viewmodel中处理逻辑事物的想法。

然后情况发生了变化。 在为移动应用开发一些登录功能时,我需要在点击时调用“ DisplayAlert” “ pop” “ push” 按钮。

我检查了一些论坛和博客以了解如何解决,如下所示:

  1. 通过导航作为参数,例如this thread,甚至在同一线程中使用注入;
  2. 使用userdialogs之类的NuGet软件包
  3. 使用Microsoft docs之类的处理程序(因此,我认为在简单的导航中使用处理程序是可以接受的。)
  4. 在viewmodel类中添加一些消息文本并将其映射到视图上的某些条目,但这无法解决对话框或导航所需的冲突。

这个问题应该改为“如何选择按钮实现,处理程序或命令”吗?

但是同样,MVVM不建议使用“处理程序”。现在我很困惑。

任何建议都会有所帮助。

干杯。

1 个答案:

答案 0 :(得分:0)

尽管您使用了MVVM。使用use命令会更好,因为如果您在后面的代码中使用click事件,它将破坏MVVM的标准(我们应尽快处理ViewModel中的逻辑)。

您可以处理ViewModel中的逻辑并在xaml中传递参数。

例如,如果要传递内容页面并在ViewModel中获得导航

  

在xaml中

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Name="MainContentPage"
             x:Class="xxx.MainPage">

//...

 <Button Command="{Binding Path=BindingContext.ButtonClickCommand , Source={x:Reference MainContentPage}}" CommandParameter="{Binding .}" Text="xxx"/>
...
  

在ViewModel中

ButtonClickCommand = new Command(
            (parameter) =>
            {
                var page = parameter as ContentPage;
               // do something you want
            });