2013-05-05 2 views
0

RX.Net을 사용하여 숫자와 다양한 다양한 (WinForms) 컨트롤의 .TextChanged/.RowsChanged/.SelectionChanged 이벤트를 수신하고 하나의 조건이 채워질 때마다 (ControlA) 언제 어떻게 수신 할 수 있습니까? 텍스트가 비어 있지 않으면 ControlB.RowsCount> 0 등) 하나의 DoSomething 버튼을 활성화합니다.Reactive Extensions를 사용하여 Control.Enabled = true/false 조건을 조화시키고 단순화합니까?

현재 우리는 각각의 이벤트 핸들러에 긴 if/then 문이 있기 때문에 상황이 바뀌면 중복 코드로 인해 오류가 발생하기 쉽기 때문에 요청하고 있습니다. 가능한 이유는 이것이라고 생각합니다. 이벤트 스트림을 가져와 조건을 한 곳에서 처리하는 것이 좋을 것입니다.

누구나 할 수 있습니까?

+0

RX를 사용하여 정말 과잉입니다. 그리고 뷰 자체에서이를 수행하면 안됩니다. 버튼의'Enabled' 속성으로 databind하는'CanDoSomething'과 같은 속성을 가진 ** viewmodel **을 갖는 것이 훨씬 더 쉽습니다. 나는 이것에 대해 자세히 설명 할 시간이 없다. 어쩌면 나중에, 또는 다른 사람? –

+0

@GertArnold 감사하지만 이것은 Model/View/ViewModel 사이의 분리가없는 WinForms 응용 프로그램입니다. 분명히 다른 해결책과 해결 방법이 있습니다.하지만 서로 다른 이벤트의 스트림을 결합하는 것을 이해하고, 한 순간에 정확히 한 조건이 충족되는 경우 무언가를하는 것으로부터 RX에 자연스럽게 들어 맞는 것처럼 보입니다. 질문이 있습니다.이 작품이든 아니든, 그리고 어느 쪽의 방법으로 (왜) 그리고 이상적으로 그렇게. –

답변

0

Observable.FromEventPattern을 Observable.When에서 Observable.FromEventPattern과 함께 사용하면 Observable.And 및 Observable.Then을 사용하여 다양한 조건 (예 : 이벤트 조합)에 따라 실행되는 관찰 가능 목록을 만들 수 있습니다. 예를 들어, 여기 내 대답을 고려하십시오 : Reactive Extensions for .NET (Rx): Take action once all events are completed

+0

완벽한, 감사합니다! –

0

.FromEventPattern()을 사용하여 각 이벤트에 대한 관찰 가능을 생성 한 다음 CombineLatest()을 사용하여 현재 전체 상태에 대한 논리를 수행하고 버튼을 활성화해야하는지 여부를 한 곳에서 결정할 수 있습니다.

관련 문제