当我的Model和ViewModel完全相同时,我是否还在为MVVM烦恼?WP 8.1

J86*_*J86 2 c# mvvm windows-phone-8.1

我正在开发Windows Phone 8.1(非SL)应用程序.这是一个关于针对儿童的水果和蔬菜的问答游戏.这是我的整个模型:

namespace FruityLogic.Models
{
    public class Quiz
    {
        public int lives { get; set; }
        public Question Question { get; set; }
        public List<Feg> Feges { get; set; } // Feg meaning Fruit and Veg ;)
        public List<int> IdsOfDoneFeges { get; set; }

        public Quiz()
        {
            LoadData();
            lives = 3;
            IdsOfDoneFeges = new List<int>();
            Question = new Question()
            {
                Feg = Feges[0],
                OptionFeges = new List<Feg>()
                {
                    Feges[1],
                    Feges[2],
                    Feges[0]
                }
            };
        }

        public void LoadData()
        {
            Feges = new List<Feg>()
            {
                new Feg() { Id = 0, Name = "Banana", Image = "../assets/banana.jpg"},
                new Feg() { Id = 1, Name = "Orange", Image = "../assets/orange.jpg"},
                new Feg() { Id = 2, Name = "Apple", Image = "../assets/apple.jpg"},
                new Feg() { Id = 3, Name = "Cherry", Image = "../assets/cherry.jpg"},
                new Feg() { Id = 4, Name = "watermelon", Image = "../assets/watermelon.jpg"},
                new Feg() { Id = 5, Name = "Lettuce", Image = "../assets/lettuce.jpg"},
            };
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

测验将在屏幕上显示水果或蔬菜的图片,并且用户将为所示的水果/蔬菜选择正确的名称.

我正在努力与MVVM方面.我读了这个教程,但它并不适用于我,或者至少我不能让它与之相关!

我的模型和ViewModel就我所见,完全相同.我是否打算创建一个ViewModel?

另外,我如何通知我的观点,问题已经改变,以便它与下一个问题绑定?我是否INotifyPropertyChangedQuestion课堂上实施并为问题的每个属性触发它?或者只有一个属性就够了?另外,如果我这样做,ObservableObject<>我的Quiz班级中的问题没有被包围,测验如何知道问题已经改变了?

正如你所知,我对所有这一切感到困惑,并且非常感谢一些澄清.

Hen*_*man 6

我的模型和ViewModel就我所见,完全相同.我是否打算创建一个ViewModel?

是.您需要一个ViewModel来将View数据绑定到.问题是你是否需要一个单独的模型.这取决于你用它做什么,比如存储在Db或文件中.但是单独的模型通常是个好主意.

并且您的Model属性都没有实现INotifyPropertyChanged,这是要解决的问题,例如通过使用INPC在VM中复制它们.

另外,我如何通知我的观点,问题已经改变,以便它与下一个问题绑定?

通过添加SelectedQuestion属性.这是VM的任务."选定"对于模型而言通常不是一个有意义的概念.

总之,ViewModel应该执行'Presentation Logic',Model是'Bussines Logic'.

通过将整个Model类转发为单个属性,ViewModel可以非常简单.然后添加SelectedSomething等.

我一直很喜欢这张照片,但其他人觉得它太复杂了.