当我的Model和ViewModel完全相同时,我会为MVVM烦恼吗?WP 8.1
本文关键字:烦恼 MVVM WP ViewModel Model 我的 | 更新日期: 2023-09-27 18:00:34
我正在开发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"},
};
}
}
}
测试应该在屏幕上显示水果或蔬菜的图片,用户可以为显示的水果/蔬菜选择正确的名称。
我在MVVM方面很吃力。我读过这个教程,但它并不真正适用于我,或者至少我无法将其联系起来!
据我所见,我的模型和ViewModel完全相同。我是否需要创建ViewModel?
此外,我如何告知我的观点,一个问题已经改变,从而与下一个问题绑定?我是否在Question
类上实现了INotifyPropertyChanged
,并为Question的每个属性激发它?还是仅仅一处房产就足够了?此外,如果我这样做,在我的Quiz
类中,问题周围没有ObservableObject<>
,测验如何知道问题已经改变?
正如你所知,我对这一切感到困惑,非常感谢你的澄清。
据我所见,我的模型和ViewModel完全相同。我是否需要创建ViewModel?
是的。您需要一个ViewModel来将视图数据绑定到。问题是您是否需要一个单独的Model。这取决于你对它做了什么,比如存储在Db或文件中。但单独的模型通常是个好主意。
并且您的Model属性都没有实现INotifyPropertyChanged,这是需要解决的问题,例如通过在具有INPC的VM中复制它们。
此外,我如何告知我的观点,一个问题已经改变,从而与下一个问题绑定?
通过添加SelectedQuestion属性。这是VM的任务"选定"对于模型来说通常不是一个有意义的概念。
总之,ViewModel应执行"Presentation Logic",Model应为"Bussines Logic"。
ViewModel可以非常简单,将整个Model类作为单个属性转发。然后添加SelectedSomething等
我一直很喜欢这张照片,但其他人觉得它太复杂了。