Gewusst wie: Hinzufügen von berechneten Eigenschaften auf dem Client

Sie können im WCF RIA Services-Clientprojekt Eigenschaften hinzufügen, die aus Eigenschaften in der Entitätsklasse berechnet werden. Das Ereignis, durch das Benutzeroberflächenelemente über die Änderung des Werts benachrichtigt werden, wird mithilfe von partiellen Methoden ausgelöst. Wenn Sie berechnete Eigenschaften hinzufügen, ist die Eigenschaft nur im Clientprojekt vorhanden. In diesem Thema wird beschrieben, wie solche berechneten Eigenschaften hinzugefügt werden.

Weitere Informationen zum Anpassen von generiertem Code finden Sie unter Anpassen des generierten Codes. Informationen zum Generieren von Clientcode finden Sie unter Clientcodegenerierung.

So fügen Sie eine berechnete Eigenschaft hinzu

  1. Fügen Sie im Clientprojekt eine Klassendatei hinzu.

  2. Deklarieren Sie eine partielle Klasse mit dem gleichen Namen und Namespace wie die zu ändernde Entitätsproxyklasse.

  3. Fügen Sie eine Eigenschaft hinzu, durch die basierend auf einem oder mehreren Werten in der Entitätsproxyklasse ein neuer Wert erstellt wird.

  4. Implementieren Sie die partielle On[CustomProperty]Changed-Methode für jede zum Berechnen des neuen Werts verwendete Eigenschaft, und rufen Sie die RaisePropertyChanged-Methode auf, um das Framework über die Änderung der berechneten Eigenschaft zu benachrichtigen.

    Das folgende Beispiel zeigt, wie die gesamte verfügbare Abwesenheitszeit für einen Mitarbeiter auf Grundlage der Urlaubsstunden und Krankentagen berechnet wird. Eine Änderung der Urlaubs- oder Krankheitsstunden führt zu einer Änderung der Gesamtanzahl von Abwesenheitsstunden.

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

    Mit dem folgenden Code können Daten an diese berechnete Eigenschaft gebunden werden.

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