2017-12-09 13 views
2

現在のところ、私は自分のボタンのクリックイベントに対してプレーンな古いデリゲート/イベントオブザーバパターンを使用しています。だから、私はRxに行くと思った。XamarinでRxを使用したイベントをブリッジする

私の最初の試みはボールだった。私はあなたがWinFormsの例に見る最も簡単な過負荷のために行くだろうと思って:

Observable.FromEventPattern<EventArgs>(__navToTestButton, 'click'); 

しかし、私はAndroidのボタンがクリックイベントを持っていないという例外が発生しました。それは壮大な割合の反射失敗です。私はおそらく私はdllを逃していると思うよ(偉大な、私のAPKをさらに大きくする別のDLL)。

とにかく、私は違うオーバーロードで偽造したいと思っていました。これは次のようになります。

navToTest = Observable.FromEventPattern<EventArgs>(
    x => _navToTestButton.Click += _navToTestButton_Click, 
    x => _navToTestButton.Click -= _navToTestButton_Click 
).ObserveOn(SynchronizationContext.Current); 

まだ失敗しています。例外なし。しかし、私がボタンをクリックすると、ちょうどクリケットとタンブルウィード。私はそれを購読するつもりだったのですか?サブスクリプションがすでに過負荷状態になっているように見えるので、どのように見えますか?

Xamarinは十分にトリッキーですが、Rxは血まみれになってしまいます。特にそれについてブログ人々の豊か不足で(少なくとも私のGoogle検索があまりにも便利な、何も上がっていない。私は私が見つけたいくつかのこまごまとした上で私のコードをベース。

おかげ

答えて

2

私は表示されませんあなたの観察可能な上の任意のサブスクリプション(S):

リフレクション:

Observable.FromEventPattern(aButton, "Click") 
    .Subscribe((obj) => Log.Debug(TAG, $"StackOverflow: {obj}")); 

ハンドラ:

Observable.FromEventPattern(
    handler => aButton.Click += handler, 
    handler => aButton.Click -= handler 
) 
.Subscribe(
    (obj) => Log.Debug(TAG, $"StackOverflow: {obj}") 
); 

ダブルタップを観測可能にする:

var fromInterval = TimeSpan.FromMilliseconds(250); 
var toInterval = TimeSpan.FromMilliseconds(500); 

var buttonTapped = Observable.FromEventPattern(
    handler => aButton.Click += handler, 
    handler => aButton.Click -= handler 
); 
var doubleTaps = buttonTapped 
     .TimeInterval() 
     .SkipWhile(t => t.Interval < toInterval) 
     .FirstAsync(t => t.Interval < fromInterval) 
     .Repeat();   
doubleTaps 
     .Subscribe(
      (obj) => Log.Debug(TAG, $"Double Tap: {obj}") 
    ); 
+0

ありがとう。それはうまくいった。 Rxのすべてのものと同様に、私はAPIを実際に理解していません。それは非常に "猿は、お金を参照してください"です。 – onefootswill

関連する問題