MVVM обнаружение изменений субпредложения - PullRequest
3 голосов
/ 18 октября 2011

Моя проблема заключается в следующем:

Я работаю с шаблоном MVVM, и я хотел бы знать, как обнаружить изменения субпредприятий.

У меня есть текстовое поле:

<TextBox Name="Descripcion" Text="{Binding AccionActual.Descripcion,Mode=TwoWay}" />

В ViewModel у меня есть свойство:

Accion _accionActual;
public Accion AccionActual
    {
        get { return _accionActual; }
        set
        {
             _accionActual = value;
             RaisePropertyChanged("AccionActual");
        }
    }

Определение сущности Accion:

public partial class Accion : Entity
    {
        public Accion()
        {

            this.AccionesDocumentos = new HashSet<AccionDocumento>();

        }

        public int IdAccion { get; set; }
        public int IdEmpleado { get; set; }
        public string Descripcion { get; set; }
        public string DescripcionDetalle { get; set; }
        public bool Finalizada { get; set; }
        public Nullable<int> IdExpediente { get; set; }
        public Nullable<int> IdOrdenTrabajo { get; set; }
        public bool Facturable { get; set; }
        public Nullable<short> GestComAlbaranAño { get; set; }
        public Nullable<short> GestComAlbaranEmpresa { get; set; }
        public Nullable<int> GestComAlbaranNumero { get; set; }
        public bool Facturado { get; set; }
        public bool ComputarHorasACliente { get; set; }
        public string DescripcionInterna { get; set; }

        public virtual Aplicacion Aplicacione { get; set; }
        public virtual AplicacionModulo AplicacionesModulo { get; set; }
        public virtual Cliente Cliente { get; set; }
        public virtual ClienteContacto ClientesContacto { get; set; }
        public virtual Empleado Empleado { get; set; }
        public virtual Expediente Expediente { get; set; }
        public virtual OrdenTrabajo OrdenesTrabajo { get; set; }
        public virtual ICollection<AccionDocumento> AccionesDocumentos { get; set; }


    }

Я мог бы создать в ViewModel свойство для каждого из свойствAccion, но есть ли способ получить изменения, не создавая свойство для каждого из свойств Accion?

Ответы [ 2 ]

2 голосов
/ 18 октября 2011

У вас есть два варианта: либо изменить класс Accion для реализации INotifyPropertyChanged, либо создать оболочку ViewModel, чтобы сделать это.

Где вы это сделаете, сделайте то, что лучше для вас.Здесь есть вопрос о преимуществах этого в классе ViewModel vs Model здесь .

Вы могли бы выполнить ручной процесс, выполнив что-то вроде notifypropertyweaver - попробуйте использовать Google, чтобы найти INotifyPropertyChanged Aspect Oriented Programming.Здесь есть вопрос Stackoverflow .

0 голосов
/ 18 октября 2011

Этот вид избыточной двойной обертки с помощью ViewModel является распространенной проблемой в классическом MVVM и меня тоже сводит с ума.

У вас есть несколько вариантов:

  1. Пусть ваша сущность реализует INotifyPropertyChanged и предоставит сущности для просмотра таким же образом, как вы это сделали со свойством AccionActual.
  2. Полностью спрячьте свою сущность за соответствующим объектом ViewModel и добавьте только те свойства в ViewModel, которые вам фактически необходимы в представлении. Внедрите интеллектуальную инфраструктуру уведомлений об изменениях, которая уведомит вашу ViewModel об изменениях в модели и соответственно вызовет PropertyChanged в вашей модели представления. Эта «инфраструктура уведомлений об изменениях» может быть EventAggregator , и, возможно, вам удастся избежать какого-либо массового / мета-обновления (например, поднять NotifyPropertyChanged для всех соответствующих свойств в ViewModel, когда вы получили событие), объект изменился ».
...