2016-12-19 3 views
3

When는 내 Xmarin.Android 액티비티에서 바인딩을 설정했는데, WhereSourceChanges()를 사용하여 내 viewmodel의 부울 속성에 바인딩합니다. 또한 ValueChanged 이벤트를 시도하고 두 경우 모두 이벤트 리스너가 처음 3 ~ 4 번 실행 한 다음 작동을 멈 춥니 다. 값은 확실히 바뀌었고, 나는 진실과 거짓 사이를 번갈아 가며 아직 잠시 후 작동을 멈춘다. 왜이게 될지 아십니까?MVVMLight ValueChanged 이벤트 리스너가 멈추기 전에 3-4 회만 triggred합니다.

this.SetBinding(() => this.Vm.ShowErrorMessage) 
.WhenSourceChanges(() => 
{ 
if (this.Vm.ShowErrorMessage) 
{ 
    this.ErrorMsg.Visibility = ViewStates.Visible; 
} 
else 
{ 
    this.ErrorMsg.Visibility = ViewStates.Gone; 
} 
}); 

것은 내가 안드로이드 버전 4.2 삼성 갤럭시 장치에 Win10 시스템에서 VS2015 및 테스트 개발, MvvmLightLibs의 v5.3.0을 사용하고 있습니다.

+0

당신이 어딘가에 뷰 모델을 교체 : 당신이해야 할 일을 당신의 경우

그런 뭔가? 이벤트가 설정되어있는 뷰 모델을 사용하지 않는 것처럼 들립니다. – Default

답변

1

바인딩은 약하게 참조되며 저장하지 않으면 가비지 수집됩니다. Please watch my presentation here.

private List<Binding> _bindings = new List<Binding>(); 

다음

_bindings.Add(this.SetBinding(…)); // (the rest remains the same). 
+0

대단히 감사합니다. :) 바인딩을 저장하면 내 문제가 해결되었습니다. – user2240342

+0

@LBugnion 나는 동일한 문제에 OP가 있고 강한 바인딩에 바인딩을 저장합니다. 'GC.Collect()'가 호출 된 후에 만 ​​발생합니다. 지금은 단지'ValueChanged'를 사용하여 해결할 수 있습니다. 그것에 관한 어떤 생각? – jzeferino