Nehmen wir an, ich habe zwei Observables Obs1 und Obs2. Ich möchte, dass ein Trigger auf Obs1 den nachfolgenden Trigger auf Obs2 unterdrückt (Marmordiagramm unten). Wie mache ich das?Wie Trigger auf einer Observable zu verwenden, um Trigger auf einem anderen zu unterdrücken?
Obs1---x---x--x----
Obs2----yyy-yy-yyyy
Rslt-----yy--y--yyy
Speziell habe ich eine Klasse mit zwei Eigenschaften, Target und SelectedItem. Wenn das Ziel festgelegt ist, sollte SelectedItem sofort basierend auf einer SpecialValue-Eigenschaft auf dem Ziel festgelegt werden. Benutzer sollten in der Lage sein, die Auswahl zu ändern. In diesem Fall wird der neue Wert an das Ziel weitergegeben. SelectedItem sollte nur dann zum Ziel zurückkehren, wenn der Benutzer den Wert ändert. Der Wert wird jedoch in dem Moment an das Ziel weitergegeben, an dem das Ziel festgelegt wurde. Dies ist das unerwünschte Verhalten, das ich beheben möchte.
(SelectionViewModel nutzt ReactiveUI, aber wir nachgeahmt SetProperty Methode des Prism in der Migration zu unterstützen. BindToProperty ist nur eine Hilfsmethode, die tut, was sie sagt.)
sealed class SelectionViewModel
{
internal SelectionViewModel()
{
this.WhenAnyValue(x => x.Target).Where(t => t != null)
.Select(_ => Target.SpecialValue)
.BindToProperty(this, x => x.SelectedItem);
this.WhenAnyValue(x => x.Target).Where(t => t != null)
.Select(_ => this.WhenAnyValue(x => x.SelectedItem).Skip(1))
.Switch()
.BindToProperty(this, x => Target.SpecialValue);
}
private MyClass _selectedItem;
public MyClass SelectedItem
{
get { return _selectedItem; }
set { SetProperty(ref _selectedItem, value); }
}
private ITarget _target;
public ITarget Target
{
get { return _target; }
set { SetProperty(ref _target, value); }
}
}
Im Interesse der Klarheit können Sie bitte Code für 'BindToProperty teilen()' – aateeque
Es ist eine faire Anfrage, aber der Code ist ziemlich lang und ich denke, dass es als proprietär angesehen wird, also würden die Kräfte, die sein würden, wahrscheinlich meine Kniescheiben brechen, wenn ich es teilen würde. – ket
Können Sie beschreiben, was es tut? Erzeugt es eine neue "Bindung" mit dem ersten Parameter als Quelle und dem zweiten als Ziel? – aateeque