0

wp8.1의 범용 앱과 함께 MVVM Light를 사용하여 다음과 같은 문제가 있습니다. 생성자의 ViewModel에서 메서드에 대한 참조 대신 람다를 사용하여 간단한 RelayCommand를 만듭니다. 문제는 때로는 전화로 데스크톱으로 이동 한 다음 앱으로 돌아갈 때 약한 참조가 사라진다는 것입니다. 약한 참조를 사용하는 이유를 이해하지만 View 및 ViewModel을 언로드하지 않을 때 왜 제거되는지 이해할 수 없습니다. Frame.GoBack을 통해 페이지로 돌아갈 때도 마찬가지입니다. 페이지 캐싱 (새로운 인스턴스가 생성되면) 없이도 참조가 갑자기 수집되도록 설정됩니다.RelayCommand 약한 참조 (람다 포함)

GoHomeCommand = new RelayCommand(() => 
     { 
      navigationService.NavigateTo("ScheduleChoicePage"); 
     }); 

<AppBarButton x:Uid="HomePage" Command="{Binding GoHomeCommand}"/> 

방법에 대한 참조를 사용할 때 람다가 아니더라도 문제는 없습니다.

답변

0

실제로이 참조를 해제하는 것은로드/언로드/탐색의 문제가 아닙니다. 가비지 수집기의 문제 일뿐입니다. 이 람다에 대한 강력한 참조가 없으므로 작성한 후 언제든지 수집 할 수 있습니다.

해결 방법은 작업을 만들 때 lambda를 사용하거나 ViewModel 객체의 어딘가에 람다 참조를 유지하는 것이 아닙니다.