【问题标题】:How can I bind events in Android (MvvmCross)如何在 Android (MvvmCross) 中绑定事件
【发布时间】:2014-02-14 02:59:04
【问题描述】:

我正在使用 MvvmCross 在 Xamarin 中构建一个跨平台应用程序,我已经在我的核心中声明了我的 ViewModels,并且首先在我的 Windows 8 项目上工作,这要感谢 Stuart Lodge 之前用这个 link 回答了我,我可以这样绑定页面的 Loaded 事件(使用交互 dll):

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

如何在 Android 中使用 MvvmCross 做同样的事情?

谢谢!

【问题讨论】:

    标签: c# android xamarin.android xamarin mvvmcross


    【解决方案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 行为(通过编写特定于平台的自定义演示者)。基本上,您可以控制如何在平台上执行视图模型类型的 ShowViewModel 请求。

    【讨论】:

    • 基本上我需要“加载”事件,因为一旦我的应用程序的第一页加载,我将运行一个命令来确定是否保存任何用户数据。如果没有保存数据,我会停留在当前页面,如果数据确实存在,我会立即导航到下一页。换句话说,我将使用该事件来执行“初始”检查。
    • Andrei 现在我在阅读此链接后了解您的答案,谢谢! github.com/MvvmCross/MvvmCross/wiki/…
    • 很高兴听到它对您有帮助
    猜你喜欢
    • 2013-10-19
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多