我的问题如下:
我正在使用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的每个属性创建属性?
答案 0 :(得分:2)
您有两个选择 - 修改Accion类以实现INotifyPropertyChanged或创建一个ViewModel包装器来执行此操作。
你认为这取决于你 - 做最适合你的事情。有a question on the merits of doing it in the ViewModel vs Model class here。
您可以通过查看类似notifypropertyweaver之类的内容来执行此操作的手动过程 - 尝试使用Google查找INotifyPropertyChanged面向方面编程。有一个Stackoverflow question on it here。
答案 1 :(得分:0)
ViewModel的这种冗余双重包装是经典MVVM中的常见问题,也让我疯狂。
您有几种选择:
INotifyPropertyChanged
并使用AccionActual
属性将实体公开给View。