MVVM模式混乱

时间:2013-09-05 08:40:03

标签: c# .net wpf mvvm

我在MVVM模式中感到困惑。实际上我有ViewModel,其中我有一个ObservableCollection,AssignmentClass与模型赋值相同,但AssignmentClass中有NotifypropertyChanged。 所以我的问题是我可以在模型上实现INotifypropertyChanged,这样我就不必创建另一个类(AssignmentClass),根据MVVM模式是否正确。

我的模特是

public class assignment
{
    public int id { get; set; }
    public string title { get; set; }
    public string app_id { get; set; }
    public string student_asg_status { get; set; }
    public string teacher_id { get; set; }
    public string teacher_name { get; set; }
    public string asg_status { get; set; }
    public string sdate { get; set; }
    public string edate { get; set; }
    public string creation_date { get; set; }
    public string mod_date { get; set; }
    public string app_title { get; set; }
    public int category_id { get; set; }
    public string app_category { get; set; }
    public string cover { get; set; }
    public string icon { get; set; }
    public string settings { get; set; }


    public string isenddatedefault { get; set; }
    public string isstartdatedefault { get; set; }
    public bool isdraft { get; set; }

}

并且我的AssignmentClass具有所有相同的属性但具有NotifyPropertyChanged..on属性id为..

      private int _id;
        public int id
        {
            get
            {
                return _id;
            }
            set
            {
                _id = value;
                RaisePropertyChanged("id");
            }
         }

在我的viewmodel中我制作了像thi ..

的集合
 AssignmentCollection = new ObservableCollection<AssignmentClass>();
            var lst = await App.conn.QueryAsync<assignment>("SELECT * FROM assignment;");
            for (int i = 0; i < 6; i++)
            {
                AssignmentClass asd = new AssignmentClass();
                asd.id= lst[i].id;

                AssignmentCollection.Add(asd);


            }

我可以在模型分配上创建我的集合吗...如果它实现了propertychanged ..

AssignmentCollection = new ObservableCollection<assignment>();

2 个答案:

答案 0 :(得分:3)

是的,您可以,ViewModel可以公开模型,如果模型已经更改通知,则不必复制模型属性(就像模型引发PropertyChanged事件时所说的那样)。

你也可以阅读这篇文章:http://blog.alner.net/archive/2010/02/09/mvvm-to-wrap-or-not-to-wrap.aspx

答案 1 :(得分:3)

Implementing the MVVM Pattern

是。您可以在Model或ViewModel类中实现通知。

查看模型类

  • 视图模型是非可视类,不是从任何WPF或Silverlight基类派生的。它封装了支持应用程序中的用例或用户任务所需的表示逻辑。视图模型可以独立于视图和模型进行测试。

  • 视图模型通常不直接引用视图。它实现了视图可以绑定数据的属性和命令。它通知任何state changes via change notification events via the INotifyPropertyChanged and INotifyCollectionChanged interfaces

  • 的视图

模型类

  • 模型类是封装应用程序数据和业务逻辑的非可视类。他们负责管理应用程序的数据,并通过封装所需的业务规则和数据验证逻辑来​​确保其一致性和有效性。

  • 模型类不直接引用视图或视图模型类,也不依赖于它们的实现方式。

  • 模型类通常提供property and collection change notification events through the INotifyPropertyChanged and INotifyCollectionChanged interfaces。这允许它们在视图中容易地数据绑定。表示对象集合的模型类通常派生自ObservableCollection类。