私はObs1とObs2という2つの観測値を持っています。私は、Obs1のトリガをObs2の後続のトリガを抑制したい(下の大理石図)。これはどうすればいいですか?トリガを1つのオブザーバブルで使用して別のトリガをトリガする方法
Obs1---x---x--x----
Obs2----yyy-yy-yyyy
Rslt-----yy--y--yyy
具体的には、TargetとSelectedItemの2つのプロパティを持つクラスがあります。ターゲットが設定されているときは、ターゲットのSpecialValueプロパティに基づいてSelectedItemをすぐに設定する必要があります。ユーザーは選択を変更できる必要があります。その場合、新しい値がターゲットに伝播します。 SelectedItemは、ユーザーが値を変更した場合にのみ、ターゲットに戻されます。ターゲットが設定された瞬間に値がターゲットに伝搬しています。これは私が修正しようとしている望ましくない動作です。
(SelectionViewModelはReactiveUIを活用して、私たちは、移行を支援するためにプリズムのSetPropertyメソッドを模倣。BindToPropertyは、それが言うんばかりのヘルパーメソッドです。)
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); }
}
}
あなたは 'BindToProperty(のコードを共有してくださいすることができます)' – aateeque
それは公正な要求だが、コードはかなり長いですし、私はそれが独占的だと思うので、もしそれを共有すれば、おそらく私の膝を壊すでしょう。 – ket
あなたはそれが何をしているのか記述できますか?最初のparamをsource、secondをtargetとして新しい 'Binding'を作成しますか? – aateeque