2010-12-12 9 views
2

Ich habe eine Download-Entität in meinem EF-Datenmodell. Zwei seiner Eigenschaften, Größe und BytesDownloaded, berechnen Sie mir die Fortschritte Eigentum zu geben, die ich in der Teilklasse erstellt haben:Berechnete Eigenschaft in Entity Framework und WPF UI anzeigen

partial class Download 
{ 
    public int Progress 
    { 
     get 
     { 
      if (!Size.HasValue || Size.Value == 0) return 0; 
      return Convert.ToInt32(Math.Floor(100.0 * ((double)BytesDownloaded/(double)Size))); 
     } 
    } 
} 

In meinem WPF UI Ich habe:

<DataGridTemplateColumn x:Name="progressColumn" Header="Progress" Width="*"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <ProgressBar Value="{Binding Path=Progress, Mode=OneWay}" Maximum="100" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Da der Fortschritt nicht ist Als Teil des Entity Model (edmx) muss ich der Benutzeroberfläche mitteilen, dass sie die ProgressBar aktualisieren soll. Ich dachte, ich könnte dies tun, wie so:

partial void OnBytesDownloadedChanging(long value) 
{ 
    ReportPropertyChanging("Progress"); 
} 
partial void OnBytesDownloadedChanged() 
{ 
    ReportPropertyChanged("Progress"); 
} 

Dies kompiliert in Ordnung, aber wenn ich laufe die App und OnBytesDownloadedChanging/Geändert genannt werden, bekomme ich diese Ausnahme auf meinen Anruf ReportPropertyChanging/Geändert:

Die Eigenschaft 'Progress' hat keine gültige Entitätszuordnung für das Objekt . Weitere Informationen finden Sie in der Entity Framework-Dokumentation.

Ich verstehe, was die Fehlermeldung sagt, aber ich verstehe nicht, was ich tun kann, um mein Ziel tatsächlich zu erreichen.

PS - Auf welche spezifische "Dokumentation" beziehen sie sich überhaupt? Seufzer! Wenn sie andeuten werden, dass es eine Dokumentation für diesen Fehler gibt, warum verlinken sie mich nicht einfach mit der Dokumentation, anstatt mir zu sagen, dass ich [sinnlos] versuchen und finden soll?

Antwort

3

Verwenden Sie OnPropertyChanged/Changing anstelle von ReportPropertyChanged/Changing. Die Methoden On* lösen nur das Ereignis aus, während die Methoden Report* die Eigenschaft auch als Änderungsverfolgung kennzeichnen.

+0

Thomas, danke, aber ich denke ich bin jetzt verwirrt. Es gibt keine "OnProgressChanging/Changed" automatisch generierten Funktionen, die ich aufrufen kann, weil die Progress-Eigenschaft nicht in meinem Datenmodell ist. Alles was es ist, ist der öffentliche Getter, der in Frage steht. Gibt es eine Möglichkeit, eine berechnete Eigenschaft in meinem EF-Datenmodell einzurichten? – Chad

+1

Sie werden nicht generiert, sie werden von der Basisklasse geerbt. Rufen Sie einfach 'OnPropertyChanged (" Progress ")' auf. Eigentlich müssen Sie 'OnPropertyChanging' nicht aufrufen, AFAIK wird nur für Change-Tracking verwendet, nicht für WPF-Bindings –

+0

Das war's! Vielen Dank. – Chad

Verwandte Themen