在ViewModel中访问Xamarin.Forms

时间:2018-06-26 06:54:59

标签: c# xamarin mvvm xamarin.forms

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

谢谢

2 个答案:

答案 0 :(得分:1)

从视图模型访问视图确实是在“反对” MVVM原理。所以,您说对了!绑定Command并不难,并且可以像您可能使用的任何其他绑定一样工作。

在视图模型中,只需为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框架,那么您可能已经这样做了。

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

答案 1 :(得分:0)

使用以下代码,因此您无需在ViewModel中导入Xamarin.Forms:

按钮行为

hello: world

查看

 datePicker.maximumDate = date.addingTimeInterval(604800)