1

我首先实现代码,MVC 模式并使用 Entity Framework 4.1。我把我的问题用粗体表示。

让我们假设(为简化起见)我有以下 POCO 对象(部门),并且我想知道一旦执行 contextDB.SaveChanges() 并对其进行更新,它何时会发生变化,因此我实现了以下内容:

public class Department : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public void NotifyPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
        if (propertyChanged != null)
        {
            propertyChanged(this, e);
        }
    }

    [Key(), Required]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    private string name;

    [Required]
    public string Name
    {
        get
        {
            return this.name;
        }

        set
        {
            if (this.name== value)
            {
                return;
            }

            this.name= value;
            this.NotifyPropertyChanged(this, new PropertyChangedEventArgs("Name"));
        }
    }

    private string personInCharge;

    [Required]
    public string PersonInCharge
    {
        get
        {
            return this.personInCharge;
        }

        set
        {
            if (this.personInCharge== value)
            {
                return;
            }

            this.personInCharge= value;
            this.NotifyPropertyChanged(this, 
                    new PropertyChangedEventArgs("PersonInCharge"));
        }
    }
}

我有 3 个项目(类库),用于 M(模型)、V(视图)和 C(控制器)。

从视图(V),用户生成和事件,例如,通过按下按钮添加一个部门,因此引用控制器(C)的视图调用控制器中的方法“添加”。

引用模型(M)的控制器(C)可以访问上下文,因为它实例化了从模型中的 dbContext 派生的类,并通过上下文更新实体“部门”,例如 dbContext.departments.add (新部门)。

当模型中的实体部门更新时,实体部门中的上述NotifyPropertyChanged被提出,但我的问题从这里开始,是:如何对视图说,嘿!实体部门已更改,因此应更新视图部门!

为了实现它,我实现了观察者模式,我的意思是视图部门有一个名为“更新”的方法,附加到模型维护的观察者集合上,因此模型在属性更改时迭代这个集合并调用每个视图的“更新”方法和视图更新。

我的问题是:我不知道如何从视图中订阅上述类部门中的事件 PropertyChanged,以便一旦部门 POCO 对象(上述类)中的属性发生更改,模型将迭代包含的观察者集合观察者附加,然后为附加到集合的每个视图(观察者)调用适当的“更新”方法。或者也许有另一种更好的方法来做到这一点,而不是对 POCO 对象使用 INotifyPropertyChanged?

我还看到使用 INotifyPropertyChanged 的​​问题,我的意思是,例如,每次添加一个部门时,视图将更新两次,因为 NotifyPropertyChanged 被引发两次,一次来自 Name 属性,另一个来自 PersonInCharge 属性。这里的另一个问题:如何只引发一次 NotifyPropertyChanged 事件而不是两次?

4

0 回答 0