2011-01-25 2 views
1

WPF, MVVM, Prism 및 MEF를 사용하는 응용 프로그램에서 작업 중입니다.MVVM, PRISM 및 MEF를 사용하여 사용자 요청없이 뷰 모델에서 UI 상호 작용을 처리하는 방법

요청 탐색이있는 탐색, 지역 관리자를 사용하는보기 관리가있는 컨트롤러 및 이벤트 집계기를 통해 이벤트를 결합하여 단일 창에서 응용 프로그램을 실행 중입니다. 저는 Stock Trader RI가 어떻게 일하는 것과 비슷한 첫 번째 접근법을 사용하고 있습니다. UI (통화 중 표시기)와 상호 작용할 뷰 모델 코드가 사용자에 의해 시작될 때이 기능이 훌륭하지만 장면 뒤에서 시작될 때 문제가 발생할 수 있습니다.

이것이 제대로 구현되지 않은 것 같습니다. 그러나 유효한 시나리오가 있다고 생각합니다. 내 특정 예제는 로그인과 관련이 있습니다.

현재 응용 프로그램이 셸을 시작하고로드합니다. 로그인보기는 쉘의 주 컨텐츠 영역으로로드됩니다. 사용자가 "로그인"을 클릭하면 사용중 표시기가 나타나고 클라이언트 응용 프로그램 서비스 로그인이 실행됩니다. 로그인이 완료되면 사용중 표시기가 사라지고 화면이 사용자의 홈 화면으로 이동합니다.

사용자가 로그인 버튼을 클릭하면 내비게이션 로그인 및 탐색이 시작되기 때문에 정상적으로 작동합니다.

이제 로그인 양식에서 자동 로그인을 선택할 수있는 새로운 요구 사항이 생겼습니다. 다음에 사용자가 앱을 시작하면 로그인보기가 나타나지 않고 로그인이 뒤에서 일어날 것입니다.

이제 자동 로그인 기능을 호출하려는 경우 아무런 문제가 없습니다.이 자체로 UI 상호 작용이 없으므로 정상적으로 작동합니다. 그러나 로그인에는 몇 초가 걸리고 사용중인 표시기를 표시하려고합니다.

문제는 어디에서 자동 로그인 호출을 시작합니까? 셸 뷰 모델 생성자? 쉘 뷰 모델 PartImportsSisisfied 구현? 이 위치들 중 어느 곳에서나, 나의 사용중 표시기를 포함하고있는 쉘 뷰는 아직 실제로로드되지 않았다. 결과적으로 지역 및 지역 관리자와 같이 필요한 리소스가 없습니다. 이전 사용자가 자동 ​​로그인 (있어이 부분은 파악)하는 경우는

If yes then 
    Show busy indicator 
    Attempt to auto login 
    If auto login was success 
    Hide busy indicator 
    Navigate to user home screen 
    Else 
    Hide busy indicator 
    Navigate to login screen 
Else 
    Hide busy indicator 
    Navigate to the login screen 

어떤 아이디어가 크게 감사하고 있습니다

확인 : 그래서 내가이를 구현하기위한 좋은 방법이 될 일을.

답변

2

ShellViewModel 내에로드 가능한 개념을 다룰 인터페이스를 구현하십시오. ShellViewModel의 생성자 내에서이 논리를 수행하지 마십시오. 일반적으로 나쁜 방식이므로 객체를 인스턴스화하는 데 사용해야합니다.

public class ShellViewModel : ILoadable 
{ 
    public ShellViewModel() 
    { 

    } 

    bool ILoadable.Load() 
    { 
     //this is where you can take care of your auto login 
    } 
} 

그러면 Bootstrapper 클래스에서 이것을 호출 할 수 있습니다. 이 작업이 다른 모듈에서 완료되면 IModule.Initialize 메서드 내에서 호출 할 수 있습니다.

나는 또한이 로직이 위에서 언급 한 바와 같이 ShellViewModel에 의해 호출 될 수 있거나 이론적으로는 Bootstrapper 클래스에서 직접 호출 될 수있는 서비스 내에서 구현되어야한다고 주장 할 것이다. ShellViewModel이 잠재적으로 서비스 내에서 상태있는 데이터를 사용할 수 있도록합니다.

+0

충분합니다. 좋은 지적입니다. 현실적으로 나는 그 장소를 사용하지 않을 것이지만, 작곡 도중 Prism/MEF에서 진입 점을 설명하기 위해 사용했다.그래서 내 질문은 당신에게 돌아갑니다. ShellViewModel에서 ILoadable.Load를 호출하는 것은 무엇입니까? – BernicusMaximus

+0

@BernicusMaximus 추가 포인트 추가 ... –

관련 문제