2014-01-09 4 views
0

Windows Phone 8에서 Pivot Control을 사용하고 있는데 MVVM Light를 사용하고 있습니다.MVVM Light - ViewModel 재사용

각 PivotItem의 내용이 될 UserControl과 UserControl에서 사용해야하는 ViewModel을 만들었습니다. 예를 들어

:

ObservableCollection<PivotItem> Pivots = new ObservableCollection<PivotItem>(); 
    for (i = 0; i < length; i++) { 
     Pivots.Add(new PivotItem() { Content = new MyUserControl() }); 
    } 

일반적으로 나는 이런 식으로 뭔가 (내가 그것을 좋은의 연습하지 생각하는?)가 내 UserControl을 생성자에서 :

DataContext = new ViewModelLocator().MyViewModel; 

이 뷰 모델로부터 데이터를 가져옵니다을 위치 키를 기반으로 한 데이터베이스. 내 질문은 MyViewModel에이 키를 전달하고 MyViewModel Singleton을 작성하지 않는 방법입니다.

답변

0

우선 - ViewModelLocator의 새 인스턴스를 생성해서는 안됩니다. 하나의 루트이 하나 있는데, 이는 App.xaml 페이지의 App.Resources 요소에 자동으로 추가됩니다. {StaticResource Locator} 또는 App.Resources [ "Locator"] 코드로 XAML에서 참조 할 수 있습니다.

SECOD 문제 - 여러 피벗이 여러 별개보기 모델의 인스턴스를 원하는대로, 당신이 아마 수있는 가장 좋은 방법은 ViewModelLocator에 MyViewModel보기 모델을 추가하고 그냥 즉석에서 그것을 생성하지 않는 것입니다. 이 방법은 싱글 톤으로는 가지지 않고 원하는 것입니다. 이 방법으로 MVVM Light 기능을 잃지 않고 컨트롤을 만들 때마다 데이터를 다시 만들고 다시 가져와야합니다.

그러나 데이터를 가져 오는 데 사용하는 "키"가 제한된 집합에서 나온 것이므로 (100 개가 아닌 5 개가있을 수 있음) 첫 번째로드 후 데이터를 계속로드하려면, ViewModelLocator의 생성자에서 MyViewModel는 일반적으로

SimpleIoc.Default.Register<MyViewModel>(); 

그리고 코드의 사용에서 다음 구문

는 :

SimpleIoc.Default.GetInstance<MyViewModel>("somekeyvalue"); 

이 SimpleIoc의 내부로 공급 된 키 값을 비교합니다 기존의 뷰 모델에 대한 사전을 생성하고 이미 존재하는 경우 기존 인스턴스를 리턴합니다. 그렇지 않으면 새로운 인스턴스를 작성하여 향후 재사용을 위해 키 아래에 저장합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 그때에 ViewModels를 만들 것이다. 하지만 mvvm 조명을 사용하는 Windows Phone 클래스 어셈블리에서 ViewModelLocator에 대한 참조를 얻는 방법은 무엇입니까? – rdon

+0

나는 mvvm light를 사용하고있는 Windows Phone 클래스 라이브러리에서 ViewModelLocalor에 대한 참조를 얻는 방법을 알고 있습니까? – rdon