Compartir a través de


Agregar propiedades calculadas en el cliente

Puede agregar propiedades en el proyecto de cliente de WCF RIA Services que se calculan a partir de las propiedades de la clase de entidad. Los métodos parciales se utilizan para generar el evento que notifica a los elementos de la interfaz de usuario que el valor ha cambiado. Cuando se agregan propiedades calculadas, la propiedad solo existe en el proyecto de cliente. En este tema se describe cómo agregar dichas propiedades calculadas.

Para obtener más información sobre la personalización del código generado, vea Personalizar el código generado. Para obtener información sobre cómo generar código de cliente, vea Generación de código de cliente.

Para agregar una propiedad calculada

  1. En el proyecto de cliente, agregue un archivo de clase.

  2. Declare una clase parcial con los mismos nombre y espacio de nombres que la clase de proxy de entidad que desea modificar.

  3. Agregue una propiedad que cree un nuevo valor basándose en uno o más valores de la clase de proxy de entidad.

  4. Implemente el método parcial On[CustomProperty]Changed para cada propiedad utilizada en el cálculo del nuevo valor y llame al método RaisePropertyChanged para notificar al marco que la propiedad calculada ha cambiado.

    En el ejemplo siguiente se muestra la forma de calcular el tiempo total disponible por ausencia en el trabajo de un empleado basándose en las horas de vacaciones y de baja por enfermedad. Un cambio en las horas de vacaciones o en las horas de baja por enfermedad generará un cambio en el total de horas no laborales.

    Imports System.ServiceModel.DomainServices.Client
    
    Namespace Web
      Partial Public Class Employee
        Inherits Entity
    
        ReadOnly Property TotalOffHours() As Integer
          Get
            Return Me.SickLeaveHours + Me.VacationHours
          End Get
        End Property
    
        Private Sub OnSickLeaveHoursChanged()
          Me.RaisePropertyChanged("TotalOffHours")
        End Sub
    
        Private Sub OnVacationHoursChanged()
          Me.RaisePropertyChanged("TotalOffHours")
        End Sub
      End Class
    End Namespace
    
    using System.ServiceModel.DomainServices.Client;
    
    namespace RIAServicesExample.Web
    {
      public partial class Employee : Entity
      { 
        public int TotalOffHours 
        { 
          get { return this.SickLeaveHours + this.VacationHours; } 
        } 
        partial void OnSickLeaveHoursChanged() 
        { 
          this.RaisePropertyChanged("TotalOffHours"); 
        } 
        partial void OnVacationHoursChanged() 
        { 
          this.RaisePropertyChanged("TotalOffHours"); 
        } 
      }
    }
    

    Puede realizar el enlace de datos a esta propiedad calculada con el código siguiente.

    <dataForm:DataField Label="Total Off Hours"> 
      <TextBox Text="{Binding TotalOffHours, Mode=OneWay}" />
    </dataForm:DataField>