2016-04-18 15 views
1

私は、次のダミービューモデルがあります:私は、このクラスの新しいインスタンスを作成する場合はnullを(何も項目にバインドされていない)を返す、すぐにサブスクリプション上で観察火災をなぜWhenAnyValueはサブスクリプションでトリガ可能なトリガですか?

public class DummyViewModel : ReactiveObject 
{ 
    internal DummyViewModel() 
    { 
     ItemChanged.Subscribe(_ => Console.WriteLine()); 
    } 

    public IObservable<string> ItemChanged 
    { 
     get { return this.WhenAnyValue(x => x.Item).Select(s => s); } 
    } 

    private string _item; 

    public string Item 
    { 
     get { return _item; } 
     set { this.RaiseAndSetIfChanged(ref _item, value); } 
    } 
} 

を。これは私が別の方法で一緒にチェーンする必要がある複数のオブザーバブルを持っている私のより高度なビューモデルで問題を引き起こしています。私はSkipとStartWithの組み合わせを使っていますが、かなり複雑になっています。誰かがこれがなぜ起こっているのか、私は考慮すべき別のアプローチがあるかどうかアドバイスできますか?

答えて

3

私はそれがちょうど「設計による」と思います。 WhenAnyと友人は常に初期値を返します。これはほとんどの場合意味があります。たとえば、最後にToPropertyを使用し、通常はプロパティが初期値を取得したい場合があります。

明らかに私はあなたのアプリケーションの詳細はわかりませんが、2つの合理的なサイズのアプリケーションがあり、私は初期値をスキップする必要があった時間を考えることができません。

内部では、ObservableForPropertyObservableForPropertyへの代理人はskipInitial引数を持ちます。だからあなたはそれを使うことができます。または単に.Skip(1)

+0

ありがとうございました。私はIEditableObjectを実装するオブジェクトを持っています。BeginEdit()は、ユーザーが変更を行ったときにのみ呼び出される必要がありますが、初期値でトリガーするという課題はありません。私はSkip(1)を使用し続けます - ちょうど私が何かを明らかにしていないことを確認したかったのです。 – ket

関連する問題