2015-04-14 8 views
5

Mit ReactiveUI, ist es möglich, den Anfangswert für ein bestimmtes ReactiveObject zu ignorieren?Kann der Anfangswert für ein ReactiveObject ignoriert werden?

Zum Beispiel habe ich ein ViewModel I initialisieren, und dann ich WhenAnyValue auf dem ViewModel. Ich werde sofort benachrichtigt, dass der Wert null für meine gewählte Eigenschaft ist. Ja, ich könnte .Where(x => x != null), um dies zu vermeiden, aber es ist möglicherweise möglich, dass es später wert ist zu wissen, dass es null ist.

Mit anderen Worten, ich möchte Benachrichtigungen nach der ersten Änderung des Werts erhalten.

Ich sehe nicht sofort, wie ich das machen kann oder ob es überhaupt möglich ist. Ich sehe Hinweise auf Initial Value in der Quelle für WantsAnyValue/WantsAny, aber es ist mir unklar, wie ich diesen Anfangswert festlegen.

+1

vielleicht nicht der beste Weg, aber man konnte überspringen (1) https://msdn.microsoft.com/en-us/library/vstudio/bb358985%28v=vs.100%29.aspx – kenny

+0

@ Kenny Ich denke, Skip ist eine gute Antwort für dieses Problem. – christophano

+1

Ich werde damit als Antwort gehen. Auch der Autor oder ReactiveUI [http://stackoverflow.com/a/22215041/1060314] empfiehlt diesen Ansatz. @kenny könnten Sie das eine formelle Antwort machen, damit ich es markieren kann? –

Antwort

3

Umzug meines Kommentars zu einer Antwort auf Anfrage von OP für Punkte;)

die erste OnNext bei init zu ignorieren.

this.WhenAnyValue(model => model.Field).Skip(1) 
0

Sie sollten ObservableForProperty in diesem Fall verwenden.

WhenAnyValue benachrichtigt sofort den Anfangswert für den Abonnenten plus neue Werte in der Zukunft, während ObservableForProperty nur über neue Werte benachrichtigt und den Anfangswert überspringt.

+0

Dies löst das Problem. Eine zusätzliche Frage pro Kommentar zu dieser Frage (http://stackoverflow.com/a/22215041/1060314) Siehe Clydes Kommentar gefolgt von Paul Betts Kommentar (2. und 3.). Paul Betts sagt "Skip (1)" ist vorzuziehen. Ich glaube eher, dass 'ObservableForProperty' die bessere Wahl ist, aber ich war neugierig, also werde ich diese Frage weiter verfolgen. Ahhhh .. Ich sehe auch, dass Paul Betts einer der Hauptautoren von ReactiveUI ist, also schätze ich, dass er es weiß. –

Verwandte Themen