Procédure : Ajouter des propriétés calculées sur le client

Vous pouvez ajouter dans le projet client Services RIA WCF des propriétés calculées à partir des propriétés de la classe d'entité. Des méthodes partielles permettent de déclencher l'événement qui informe les éléments d'interface utilisateur que la valeur a été modifiée. Lorsque vous ajoutez des propriétés calculées, celles-ci existent uniquement dans le projet client. Cette rubrique décrit comment ajouter ces propriétés calculées.

Pour plus d'informations sur la personnalisation du code généré, consultez Personnalisation du code généré. Pour plus d'informations sur la génération du code client, consultez Génération de code client.

Pour ajouter une propriété calculée

  1. Dans le projet client, ajoutez un fichier de classe.

  2. Déclarez une classe partielle avec les mêmes nom et espace de noms que la classe proxy d'entité que vous voulez modifier.

  3. Ajoutez une propriété qui crée une valeur basée sur une ou plusieurs valeurs dans la classe proxy d'entité.

  4. Implémentez la méthode partielle On[CustomProperty]Changed pour chaque propriété utilisée dans le calcul de la nouvelle valeur et appelez la méthode RaisePropertyChanged pour notifier à l'infrastructure que la propriété calculée a été modifiée.

    L'exemple suivant indique comment calculer le total du temps disponible hors du travail pour un employé en fonction de ses heures de congé et de ses congés de maladie. Toute modification apportée aux heures de congé ou aux heures de congé de maladie produira la modification du total des heures d'inactivité.

    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"); 
        } 
      }
    }
    

    Vous pouvez créer une liaison de données avec cette propriété calculée à l'aide du code suivant.

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