2012-09-04 9 views
0

MVVM 라이트를 사용하여 Silverlight 5 응용 프로그램을 제작 중이며 탐색을 구현하려고합니다. 로랑 그가 SimpleIOC 컨테이너가 적절한 뷰 모델이 포함되어 있는지 확인하고 이미 존재하지 않는 경우 하나를 만들려면 다음 코드를 사용합니다 (SL4을 대상으로하는) 그의 믹스 (11) 이야기 중에 빌드 실버 라이트 4 샘플에서 MVVMlight Silverlight 5의 SimpleIoc에 ViewModels을 추가하지 않았습니다.

. 그런 다음 탐색 서비스는 상기 ViewModel을 사용하여 호출됩니다.
if (!SimpleIoc.Default.Contains<NewsItemViewModel>(item.Link.ToString())) 
{ 
    SimpleIoc.Default.Register(
    () => new NewsItemViewModel 
    { 
     Model = item 
       }, 
     item.Link.ToString()); 
    } 

     _navigationService.NavigateTo(
      new Uri(
       string.Format(ViewModelLocator.NewsItemUrl, item.Link), 
       UriKind.Relative)); 

다음 코드

후 (이 직전에대로해야한다), 그리고 상기 용기 밖으로 당기는 NewsItemViewModel이 존재하는지 확인하는 NewsItemView의 OnNavigatedTo 방법으로 실행된다.
if (DataContext == null) 
{ 
    var url = e.Uri.ToString(); 
    var itemUrl = url.Substring(url.IndexOf("?") + 1); 

    if (!SimpleIoc.Default.Contains<NewsItemViewModel>(itemUrl)) 
    { 
     MessageBox.Show("Item not found"); 
     return; 
    } 

    var vm = SimpleIoc.Default.GetInstance<NewsItemViewModel>(itemUrl); 
    DataContext = vm; 
} 

나는 실버 5에서 같은 일을하려고

내가 SimpleIoc.Default.Contains 방법이 존재하지 않는 것을 알 (프로젝트의 거의 정확한 포트를하고)하지만, 비슷한 ContainsCreated (문자열 키)가 존재합니다.

이 새로운 메서드를 사용하려고하면 bool 검사는 항상 false를 반환하고 결과적으로 탐색이 실패합니다 ("항목을 찾을 수 없습니다"메시지 상자가 나타남).

내가 잘못된 라인을 다시 한 방법의 예는 내가 여기에 놓친 거지 무슨

if (!SimpleIoc.Default.ContainsCreated<NewsItemViewModel>(itemUrl)) 

이하? 어떤 도움이 환상적 일 것입니다!

크리스

답변

2

어떻게, 그냥 이미 생성되지 않은 경우를 생성하는 GetInstance (키)를 사용하고 있지만, 먼저 등록 된 필요가있는 위의 뜻을

SimpleIoc.Default.IsRegistered<NewsItemViewModel>(itemUrl) 

사용에 대한 확인해.

당신은 또는 키를 사용하지 않을 수도 있지만 - 그 종류와 키 조합을 검사로,하지만 난 한

SimpleIoc.Default.IsRegistered<NewsItemViewModel>() 

반환 사실은, 당신은 다음에 할 수 있어야한다고 생각합니다 키로 GetInstance를 사용하십시오.

+0

이것은 모두 현재 작동합니다. – lookitskris

관련 문제