MVVM 기반 WPF 데스크톱 응용 프로그램이 있습니다. MVVMLight와 Prism을 사용하여 뷰와 하위 뷰가 포함 된 사용자 컨트롤을 만듭니다.MVVM WPF 응용 프로그램에서 자식 뷰 이벤트의 부모 뷰를 어떻게 알릴 수 있습니까?
하위보기에 단추가 있습니다. (닫기 버튼이라고 가정)
중첩 된 하위 뷰에서 상위 뷰를 포함하는 클릭 이벤트 알림을 전파하는 가장 좋은 방법은 무엇입니까?
MVVM 기반 WPF 데스크톱 응용 프로그램이 있습니다. MVVMLight와 Prism을 사용하여 뷰와 하위 뷰가 포함 된 사용자 컨트롤을 만듭니다.MVVM WPF 응용 프로그램에서 자식 뷰 이벤트의 부모 뷰를 어떻게 알릴 수 있습니까?
하위보기에 단추가 있습니다. (닫기 버튼이라고 가정)
중첩 된 하위 뷰에서 상위 뷰를 포함하는 클릭 이벤트 알림을 전파하는 가장 좋은 방법은 무엇입니까?
프리즘 EventAggregator 포함
당신이 TPayload
당신이 당신의 닫기 버튼이 당신의 하위 뷰에서 (int, string, or even class object
)
2를 전달하는 타입이다
public class CloseTabEvent : PubSubEvent<TPayload>
{
}
게시 할 1. 만들기 이벤트 게시 그 사건. 닫기 버튼 Command (메소드 실행)에서 해당 이벤트를 퍼블리시합니다. 당신의 서브 뷰 생성자에서
private void OnCloseExecuted(object obj)
{
_eventAggregator.GetEvent<CloseTabEvent>().Publish(SomethingThatYouPublis..ThisIsTPayload);
}
IEventAggregator
을 통과하고 개인 필드를 확인합니다. 당신의 mainViewModel에서
3.
private IEventAggregator _eventAggregator;
public SubViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
당신은 또한
IEventAggregator
을 통과 생성자 내부에 가입.
public MainViewModel((IEventAggregator eventAggregator)
{
eventAggregator.GetEvent<CloseTabEvent>
().Subscribe(MethodForClosingThatSpecificTab);
}
그리고 그게 전부입니다.
중요 : 일부 IoC (Unity, Autofac ..)를 사용하여 IEventAggregator
을 해결하면 싱글 톤이되므로 전체 앱용입니다.
하위보기는 부모보기 (또는보기 모델)가 구독하는 메시지를 보내려면 MshvmLight의 Messenger
클래스 또는 을 프리즘에 사용할 수 있습니다. 개념에 대한 자세한 내용은 다음 링크를 참조하십시오.
https://msdn.microsoft.com/en-us/magazine/jj694937.aspx http://dotnetpattern.com/mvvm-light-messenger https://blog.magnusmontin.net/2014/02/28/using-the-event-aggregator-pattern-to-communicate-between-view-models/
또 다른 방법은 부모 뷰 모델에서 아이 뷰 모델에 대한 강한 참조를 유지하고 부모가 구독 아동에 이벤트를 발생하는 것입니다.이벤트 수집기 또는 메신저를 사용하면 이벤트 게시자와 구독자간에 긴밀한 연결을 피할 수 있으므로 응용 프로그램을보다 쉽게 유지 관리해야하는 이점이 있습니다.
이벤트 또는 메시지의 게시자와 구독자 모두 이벤트 수집기 또는 메신저에 대해서만 알고 있지만 서로에 대해 아무것도 모릅니다.
프리즘 이벤트 수집기를 살펴보십시오. http://prismlibrary.readthedocs.io/en/latest/WPF/09-Communication/#event-aggregation –