如何在Android中绑定事件(MvvmCross)

时间:2014-02-14 02:59:04

标签: c# android xamarin.android xamarin mvvmcross

我正在使用MvvmCross在Xamarin中构建一个跨平台应用程序,我已经在我的核心中声明了我的ViewModel并且正在开发我的Windows 8项目,这要归功于Stuart Lodge以前回答过我{{3}我可以这样绑定一个Page的Loaded事件(使用Interactivity dll):

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
         <i:InvokeCommandAction Command="{Binding MyICommandThatShouldHandleLoaded}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

如何在Android中使用MvvmCross执行相同操作?

谢谢!

1 个答案:

答案 0 :(得分:1)

你能告诉你在加载的事件上想要完成什么吗?

在尝试实施视图模型时,通常我不想在UI方面做些什么。

UI可以根据平台的不同而有所不同。

在实现视图模型时,一种思考方式是认为您将需要使用视图模型进行测试,而无需使用UI。在这种情况下,您的应用应该能够在没有附加UI的情况下运行。如果您需要用户输入(如用户名和密码),您编写的测试代码就是设置视图模型的属性,类似于当UI绑定到这些属性时数据绑定的操作方式:

loginViewModel.Username = "admin";
loginViewModel.Password = "12345";

例如,在您提供的链接中,我不确定为什么需要了解主窗口加载事件以显示登录屏幕。

应对主窗口的MainViewModel可以调用

pulic class MainViewModel : MvxViewModel
{
    public void Init()
    {
        ShowViewModel<LoginViewModel>();
    }
}

这只是一个例子,它可能不那么好,但我只想表现出不同的方式。

请记住,从视图模型的角度来看,ShowViewModel并不意味着太多。

视图模型只是调用以显示另一个视图模型,这是某种“某种方式”。连接到视图。 它可能意味着显示弹出窗口,或导航到另一个页面/窗口等。视图模型不需要知道。这主要是因为UI可以在每个平台上以不同的方式工作,或者每个平台上的UI要求可能不同(因为UI模式可能不同)。

MvvmCross有一种很好的方法可以绕过默认的ShowViewModel行为(通过编写特定于平台的自定义演示者)。基本上,您可以控制在平台上如何执行ViewViewModel对视图模型类型的请求。