WPF 응용 프로그램에서 "JQuery"스타일 회 전자를 구현하려고합니다. 이 회 전자는 일부 별도의 PRISM 모듈에서 트리거 될 것이므로 회 전자가 MainWindow의 속성에 액세스하는 데 필요한 전체 응용 프로그램 창을 커버해야합니다.별도의 MVVM 모듈에서 MainWindow 속성 업데이트
MainWindow에 속성이 있지만 다른 모듈에서 볼 수 없습니다.
나는 Application.Current.MainWindow를 시도했지만 운이 없다.
또한 Application.Current.Properties []를 사용해 보았지만 OnPropertyChanged 이벤트를 트리거하는 방법을 알지 못합니다.
누군가 올바른 방향으로 나를 가리킬 수 있습니까?
업데이트 : 다음은 몇 가지 스크린 샷과 내가하고 싶은 것에 대한 더 나은 설명입니다.
다음은 내 문제의 예입니다.
WPFApp MainWindow를 포함를
- WPFApp
- WPFApp.Module1
- WPFApp.Module2
- WPFApp.Module3 : 나는 다음을 포함하는 응용 프로그램이 2 영역, 메뉴 영역 (왼편) 및 컨텐츠 영역. 의 각각에서 MainWindow를 컨텐츠 영역
에로드되는 MainWindow를 메뉴 영역
- 메뉴보기 : 각 모듈은 2 뷰를 포함 모듈 내용보기 몇 초가 걸리는 작업을 수행하려고하며 작업이 수행되는 동안 전체 응용 프로그램 창을 포괄하는 "Ajax 스타일"회 전자를 보여주고 싶습니다. 여기에 설명 된 스피너 클래스를 사용하려면 : WPF Spinner via MVVM & Attached Properties 위의 링크에서 자세히 설명 된 AsyncNotifier.Trigger를 각 모듈 컨텐츠 뷰에 추가하여이 기능을 사용할 수있었습니다 (아래 참조).
내 문제는 : 나는 회 전체 응용 프로그램 창을 포함 할 경우 나는 MainWindow를에 AsyncNotifier.Trigger를 추가해야합니다. MainWindow에서 스피너를 보여줄 책임이있는 속성을 노출하고 각 모듈에서이 속성에 액세스 할 수 있어야합니다. 이 방법에 대한 아이디어가 있으십니까?
는 업데이트 :좋아, 나는 여전히 조금 더 받고있을 것 같아 조금 모두가 함께 맞는 방법에 붙어.
다른 인터페이스가 액세스 할 수 있도록 내 인터페이스를 만들어 인프라 모듈에 넣었습니다.
다음 코드를 사용하여 AggregateModuleCatalog 클래스에서 모듈을로드하고 있습니다.
/// <summary> /// this.Catalogs is a readonly collection of IModuleCatalog /// Initializes the catalog, which may load and validate the modules. /// </summary> public void Initialize() { foreach (var catalog in this.Catalogs) { catalog.Initialize(); } }
내 문제
내가이 SpinnerViewModel을 넣어해야하는 위치의 확실하지 오전입니까? 내 메인 프로젝트에 있어야할까요?또한 Constructor 삽입을 사용하여 싱글 톤을 통과해야합니까?
이 패턴을 회 전자 UI 요소의 모든 곳에서 사용합니다.이 패턴은 내가 사용하는 코드와 매우 유사합니다. 그러나 EventAggregator가 더 많은 전역 범위를 사용해서는 안됩니까? –
하위 요소에서 컨트롤 트리의 맨 위에있는 요소를 사용 중이라는 메시지가 전역 범위에서 어떤 것인지 확실하지 않은 것은 이벤트 집계가 수행하는 구성 요소 간 통신을 분리 한 것입니다. 너무 제한된 범위라고는 생각하지 않습니다. 사용자가 자신 만의 이벤트 유형을 만들므로 메시지가 구성 요소와 상호 작용하는 수준을 결정할 수 있습니다. – Charleh
@Charleh, 매력처럼 일했습니다. 고마워요. 정말 고마워요. – Nollaig