2016-08-01 7 views
1

Also im Grunde habe ich drei Viewmodels. Eines ist das ShellViewModel, in dem alle Daten in Echtzeit gespeichert und berechnet werden. Und zwei andere Viewmodels, die die Berechnungen auf verschiedene Arten zeigen. Diese beiden VMs werden als Ansichten innerhalb der Shell-Ansicht angezeigt (über den Calibrn-Container und ActiveItem, die mit ContentControl verknüpft sind). Um die Daten zu den anderen VMs zu bekommen, binde ich ihre Eigenschaften an die Eigenschaften der Shell-VM, indem ich sie an den Konstruktor der zweiten VM sende.WPF Notify arbeitet nicht mit mehreren Viewmodels

Die Eigenschaften sind Klassen aus einer DLL mit Notify-Funktionen. Als Referenztyp sind die Klassen in den VMs identisch. In den anderen VMs binde ich an diese Klassen Eigenschaften.

class PropertyOfShellVM 
{ 
    bool PropertyA{get;set;} 
    int PropertyB{get;set;} 
} 

<CheckBox Content="PropA" IsChecked="{Binding VMProp.PropertyA}"/> 
<Slider Value="{Binding VMProp.PropB}"/> 

Das ist, dass diese Klassen sehr oft ändern und ständig aktualisiert werden müssen. Aber wenn Caliburns NotifyOfPropertyChange (() => VMProp) verwendet, wird die UI nicht aktualisiert. Ich habe versucht, Notify im Eigenschaften-Getter zu schreiben, aber ohne Wirkung. Ich habe auch versucht, die VM-Eigenschaften für benutzerdefinierte Ereignisse neu zu binden, die ich über Caliburns Ereignis-Manager an neue Ergebnisse gesendet habe, aber es ist viel zu langsam (ich habe diese Werte mehrmals pro Sekunde geändert, aber die Ereignisse aktualisieren die Benutzeroberfläche nur einmal pro 3 Sekunden). Wie kann die Notify behoben werden?

Antwort

0

Das Problem wurde behoben, indem die VMs Refresh() -Methode verwendet wurde, bei der alle Eigenschaften der VM auf der Benutzeroberfläche aktualisiert wurden. Das ist eine ziemlich grobe Entscheidung in Bezug auf gute Praxis, aber es ist anständig schnell genug und funktioniert. Wird dies noch nicht als Antwort markieren, weil es wahrscheinlich eine bessere Lösung dafür gibt.

0

Sie können die Caliburn.Micro'sEvent Aggregator verwenden, um Änderungen von einem Anzeigemodell zu einem anderen zu kommunizieren. Ich bin mir nicht sicher, wie sich das auf die Leistung auswirkt.

+0

Im letzten Absatz habe ich gesagt, dass ich das versucht habe und es ist wirklich langsam =) Ich habe nicht gesagt, dass das war Caliburn Event Manager obwohl, mb –

Verwandte Themen