MVVM Xamarin表单设计

本文关键字:表单 Xamarin MVVM | 更新日期: 2023-09-27 18:21:25

所以我在看https://github.com/xamarin/Sport举个例子,我在谷歌上搜索我当前项目的内容时遇到了这个问题。它与我正在做的类似,因为我也使用了azure后端。

我有一个关于他们mvvm布局的问题。我认为在mvvm中,模型有点像POCO,不应该实现INotifyPropertyChanged。在这种情况下,它们不是既是模型又是ViewModel吗?查看运动员模型和运动员视图模型。虚拟机具有用于Athlete的属性,因此该模型也用作虚拟机。

在我的项目中,如果我有相同的类型,我会有一个运动员模型、一个运动员视图模型和一个运动员页面视图模型。将自动映射运动员和运动员VM的位置。填充和/或创建运动员的唯一原因是将其持久化到服务或本地存储中。

一种方式比另一种方式更"正确"吗?还是我只是做错了,把事情搞得过于复杂了?我几乎不想继续我现在的做法,因为如果我可以只使用我的一些虚拟机作为模型,我不想有一堆"额外"的模型文件。

谢谢。

MVVM Xamarin表单设计

为了实现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概念,这才是最重要的。