MVVM Xamarin表单设计
本文关键字:表单 Xamarin MVVM | 更新日期: 2023-09-27 18:21:25
所以我在看https://github.com/xamarin/Sport举个例子,我在谷歌上搜索我当前项目的内容时遇到了这个问题。它与我正在做的类似,因为我也使用了azure后端。
我有一个关于他们mvvm布局的问题。我认为在mvvm中,模型有点像POCO,不应该实现INotifyPropertyChanged。在这种情况下,它们不是既是模型又是ViewModel吗?查看运动员模型和运动员视图模型。虚拟机具有用于Athlete的属性,因此该模型也用作虚拟机。
在我的项目中,如果我有相同的类型,我会有一个运动员模型、一个运动员视图模型和一个运动员页面视图模型。将自动映射运动员和运动员VM的位置。填充和/或创建运动员的唯一原因是将其持久化到服务或本地存储中。
一种方式比另一种方式更"正确"吗?还是我只是做错了,把事情搞得过于复杂了?我几乎不想继续我现在的做法,因为如果我可以只使用我的一些虚拟机作为模型,我不想有一堆"额外"的模型文件。
谢谢。
为了实现MVVM设计模式,您不需要遵循严格规则的最终主集。事实上,指导方针通常非常模糊。
据我所见,有几种不同的方法可以将模型暴露在视图中。它们在这里:
方法1-模型中的INotifyPropertyChanged
public class Car : INotifyPropertyChanged
{
private string _Model;
public string Model
{
get { return _Model; }
set
{
_Model = value;
NotifyOfPropertyChange();
}
}
...
}
public class CarViewModel
{
//The entire model is exposed to the view.
public Car Model { get; set; }
...
方法2-视图模型中的INotifyPropertyChanged
public class CarViewModel
{
private Car _Car;
//The model property is exposed to the view, not the model itself.
public string CarModel
{
get { return _Car.Model; }
set
{
_Car.Model = value;
NotifyOfPropertyChange();
}
}
...
就首选方法而言,我认为方法2是更好的选择。为什么?
- Model对象未显示在视图中
- 视图模型只公开视图所需的内容
方法2确实有其缺点。想象一下,如果您需要公开大量的模型属性,或者想象一下如果您的模型发生了更改,那么在模型中简单地实现INotifyPropertyChanged
并将其公开到视图中肯定会更容易。程序员天生懒惰,因此为了节省麻烦,你会看到方法1和方法2一样多。
但是并不是一件坏事。
一种方式比另一种方式更"正确"吗?还是我只是做错了,把事情搞得过于复杂了?
请记住,MVVM设计模式只是一种模式。这两个选项都不正确,这主要取决于开发人员的偏好,他们选择如何实现模式,只要有主要的MVVM概念,这才是最重要的。