2013-09-24 3 views
8

저는 MVVM 패턴을 연구하여 Windows Phone 8 응용 프로그램에서 실전에 옮겼습니다. ViewModels를 초기화하고 액세스하기위한 모범 사례에 대한 질문이 있습니다. 앱. 나는 WP8 SDK를 템플릿에서 데이터 바인딩 응용 프로그램을 만들 때Windows Phone 8 - MVVM ViewModels 및 App.xaml.cs

, 나는이 코드를 발견이 파일 App.xaml.cs를 :

내가 이해에서
public static MainViewModel ViewModel 
{ 
    get 
    { 
     // Delay creation of the view model until necessary 
     if (viewModel == null) 
      viewModel = new MainViewModel(); 

      return viewModel; 
    } 
} 

private void Application_Activated(object sender, ActivatedEventArgs e) 
{ 
    // Ensure that application state is restored appropriately 
    if (!App.ViewModel.IsDataLoaded) 
    { 
     App.ViewModel.LoadData(); 
    } 
} 

것을 의미한다 App 클래스에는 MainViewModel이 정적 구성원으로 포함되어 있으며 응용 프로그램이 활성화되면 ViewModel이로드됩니다.

경우되고, 나는 다음과 같은 질문을 가지고 내 응용 프로그램이 여러 ViewModels이있는 경우

  1. , 그들 모두가 App.xaml.cs를 파일 내의 회원으로 저장됩니다?

  2. 모든 ViewModel의 데이터가 동시에로드되는 경우 내 앱의 메모리를 어떻게 관리합니까? 각 ViewModel의 데이터를 언로드하고 내 View에서 사용중인 ViewModel 만로드 할 수 있습니까?

답변

9

ViewModel을 인스턴스화하는 데는 여러 가지 방법이 있습니다. 그것들 중 일부는 시작시 모두 인스턴스화 할 것이고 다른 인스턴스는 필요할 때까지 ViewModel을 인스턴스화하지 않습니다. 다음 블로그 게시물에서

당신은 ViewModel을 인스턴스화하는 몇 가지 가능한 방법을 찾을 수 있습니다 : 귀하의 질문에 응답

MVVM Instantiation Approaches

을; 귀하의 접근 방식에 따라 App.xaml.cs 파일에있는 모든 ViewModels에 대한 멤버를 정의해야합니다. 2. 필요할 때까지 ViewModel을 인스턴스화하지 않는 접근 방식을 따를 수 있습니다.

MVVM Light 또는 Caliburn Micro과 같은 일부 툴킷이있어 MVVM 패턴의 구현이 용이합니다. 개인적으로 Locator 방식을 사용하는 MVVM Light Toolkit을 사용합니다. 이 툴킷을 사용하면 기본적으로 ViewModel이로드되지만 시작할 때 특정 ViewModel을로드하도록 설정할 수 있습니다 (일부 시나리오에서 유용 할 수 있음).

+0

대단히 감사합니다. 대단히 감사합니다. 그리고 참조가 너무 좋습니다 :) 만약 내가이 접근법으로 가야한다면, 사용하지 않을 때 너무 많은 메모리를 차지하지 않기를 원한다면 내 ViewModels에서 데이터를 언로드하는 가장 좋은 방법은 무엇일까? ? – miguelarcilla

+0

나는 ViewModel에 IDisposable을 구현하고 View를 떠날 때 Dispose를하는 것이 하나의 옵션이라고 생각한다. – anderZubi

+0

andersZubi의 답변을 확장하면서, 저는 앱의 현재 상태를 나타내는 싱글 톤을 만들고 싶습니다. Dictionary 유형의 속성을가집니다. 뷰 모델을 필요로하는 모든 페이지 또는 컨트롤은 사전을 먼저 찾은 다음 아직 존재하지 않으면 만들고 사전에 viewModel을 추가합니다. 그럼 IDisposable 있다면, 당신은 그것을 해체 할 필요가 없다. 뷰를 언로드 할 필요가 없다. 뷰를 언로드 한 후에도 임의의 트리거를 기반으로 처분하도록 선택할 수있는 참조가 있으므로, 사전의 뷰 모델의 「열쇠」 –