메시지가 뷰의 생성자에 등록 될 때 여러 번 등록되기 때문에 메시지가 여러 번 발생하는 문제가 발생했습니다. S.O.의 대다수 게시물, 웹 사이트, 블로그는 다음과 같은 예를 보여MvvmLight Messaging - 메시지를 등록하고 등록을 취소하는 적절한 방법은 무엇입니까?
public ConstructorOfView() {
DataContext = viewModelObject;
Messenger.Default.Register<SomeClass>(recipient, token, method);
}
public someUnloadOrNavigateFromMethod() {
Messenger.Default.Unregister<SomeClass>(parameters and more);
}
등록 취소 나에게 아무런 영향이없는 것으로 보인다. 일부 예제에서는 ViewModel 내부에 메시지를 등록한다고합니다. 이것은 두 가지 이유로 나에게 이해가되지 않습니다. 1) 페이지의 DataContext를 ViewModel로 설정하면 ViewModel 생성자가 뷰 생성자와 마찬가지로 다시 두 번 호출됩니다. 2) ViewModel 안에 메시지를 등록하는 경우 뷰를 public static으로 만드는 것 이외에 메서드를 시작하는 방법을 정확히 알려줌으로써 메시지 대화 상자를 보여줍니다. viewmodel 내부의 대화 상자와 같은 UI 관련 요소를 호출하는 세 번째 옵션은 MvvM의 개념을 위반하는 것 같습니다.
메시지를 등록하고 등록을 취소하는 적절한 방법은 무엇입니까?
일부 게시물은 viewmodel Cleanup()을 호출하는 것이 좋지만 어떻게 든 viewmodel에 메시지를 등록해야하지만 메시지 수신자를 viewmodel로 설정하면 어떻게 뷰 모델 뷰에서 비 public-static 메소드를 호출하여 UI를 변경/표시 하시겠습니까?
답장을 보내 주셔서 감사합니다. 내가 혼란스러워하는 한 가지. viewmodel에 메시지를 등록하는 경우 대화 상자를보기와 뷰에서 처리해야 할 때 대화 상자와 같은 UI를 어떻게 변경하거나 표시합니까? 그것이 뷰 모델 내에 메시지를 등록하는 것에 대해 나에게 이해가되지 않는 것입니다. – ShrimpCrackers
나는 당신의 의심을 이해하고, 어떻게 든 그것에 동의한다. 사실 thre은 코드를 작성하는 플랫폼을 기반으로하는 많은 솔루션입니다. Windows 용 wpf 응용 프로그램을 작성한다고 가정하면 첫 번째 문제는 mvvm 극단 주의자가 아니며 메시지 처리기에서 MessageBox.Show를 직접 호출하는 것입니다. 때로는이를 수행하고 MVVM 원칙을 위반하지만 수백 줄의 코드를 저장할 수 있습니다. 두 번째 : 사용자에게 메시지를 표시하고 메시지를 표시하기 위해 일부 UI 컨트롤에 바인딩을 사용하는 방법에 대해 다시 생각해보십시오. 셋째 : 대화 상자 대신 새로운 팝업보기를 보여줍니다. –