2017-12-09 3 views
2

현재 버튼에 클릭 이벤트에 대한 일반 오래된 위임자/이벤트 관찰자 패턴을 사용하고 있습니다. 그래서 저는 Rx에 갈 것이라고 생각했습니다.Xamarin에서 Rx로 이벤트 브리징

첫 번째 시도는 공이었습니다. 나는 당신이 윈폼의 예에서 볼 수있는 간단한 과부하 갈 거라고 생각 :

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

하지만 안드로이드 버튼 클릭 이벤트를하지 않아도 예외를 얻었다. 그것은 대서사적 인 비율의 반사 실패이다. 나는 아마 dll을 놓치고있는 것 같아요 (위대한, 내 apk을 더 크게 만들 수있는 또 다른 dll).

아무리해도 나는 다른 과부하로 위조했다고 생각했습니다. 이제 다음과 같이 보입니다.

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

여전히 실패합니다. 예외 없음. 그러나 버튼을 클릭하면 귀뚜라미와 전복이 생깁니다. 내가 그걸 구독하려고 했단 말인가? 서브 스크립 션이 이미 오버로드 된 것으로 보이는 것처럼 보이는 것이 무엇입니까?

Xamarin은 충분히 까다 롭습니다. 그러나 Rx는 그냥 피로하게 만듭니다. 특히 그것 (대한 블로그 사람들의 풍요 로움의 부족으로 적어도 내 Google 검색도 유용 아무것도를 설정하지 않는다. 나는 몇 비트와 조각에 내 코드는 내가 찾았어요 기반.

감사

답변

2

내가 볼 수 없습니다 당신의 관찰에 어떤 구독 (들) :

반사 :

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