首页 > 解决方案 > 在 ViewModel 中访问 Xamarin.Forms

问题描述

我对 Xamarin.forms 中的跨平台开发非常陌生。我的代码应该是高度可单元测试的,并且我创建了一个ViewModel类来在我View的和Model. 我想知道,如果我们要在视图模型中访问 Xamarin.forms(使用 Xamarin.Forms;),这是一种不好的做法还是违反了 MVVM 概念。如果是这样,我们如何在 ViewModel 中使用 Command 来绑定视图。

谢谢

标签: c#xamarinmvvmxamarin.forms

解决方案


从视图模型访问视图确实“违反”了 MVVM 原则。所以,你是对的!但是,绑定 aCommand并不难,并且与您可能使用过的任何其他绑定一样工作。

在您的视图模型中,只需为 定义一个属性Command

public class YourViewModel
{
    public Command YourCommand { get; set; }
}

然后在构造函数中定义应该执行的逻辑:

public YourViewModel()
{
    YourCommand = new Command(() =>
    {
        Console.WriteLine("TADA!");
    });
}

当然,您可以将其定义为自己的单独方法或以其他方式声明。为简洁起见,我现在已经内联了。

要从 XAML 绑定到它,只需执行以下操作:

<Button Text="Make it so!" Command="{Binding YourCommand}" />

并确保您已将BindingContext页面上的属性设置为视图模型。如果您使用的是 MVVM 框架,您可能已经这样做了。

在某些时候,您可能希望绑定到 aListView或类似的单元格。在这种情况下,请记住范围会发生变化。然后,您将绑定到该单元格后面的视图模型,而不是页面。因此,您必须引用该页面才能到达该页面BindingContext。但是当你到达那里时,越过那座桥,请记住它有一些特别之处。


推荐阅读