c# - 在 ViewModel 中访问 Xamarin.Forms
问题描述
我对 Xamarin.forms 中的跨平台开发非常陌生。我的代码应该是高度可单元测试的,并且我创建了一个ViewModel
类来在我View
的和Model
. 我想知道,如果我们要在视图模型中访问 Xamarin.forms(使用 Xamarin.Forms;),这是一种不好的做法还是违反了 MVVM 概念。如果是这样,我们如何在 ViewModel 中使用 Command 来绑定视图。
谢谢
解决方案
从视图模型访问视图确实“违反”了 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
。但是当你到达那里时,越过那座桥,请记住它有一些特别之处。
推荐阅读
- reactjs - 为什么样式化的组件样式不添加
- python - 我有一个用于 NBA 预测的 Jupyter 笔记本/SciKit 模型,我想在线发布
- kubernetes - 使用 openAPIV3Schema 验证 PersistentVolumeClaim
- c++ - 什么时候值得使用类函数返回对自身的引用?
- php - PHP XML DOM 添加、修改和更新
- mysql - 如何在 MYSQL 表中计算周小时数?
- javascript - 重定向(react-router-dom)在反应类组件中不起作用
- c++ - 使用 extern "C" 从 C++ 调用 C 代码
- regex - 使用正则表达式替换由换行符组成的所有可能的子字符串
- python - 使用 Python 对二维数组进行排序