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))
이하? 어떤 도움이 환상적 일 것입니다!
크리스
이것은 모두 현재 작동합니다. – lookitskris