我正在使用 MVVM light 构建 Silverlight 5 应用程序,并且正在尝试实现 Navigation。
在 Laurent 在 Mix 11 演讲期间构建的 Silverlight 4 示例(针对 SL4)中,他使用以下代码检查 SimpleIOC 容器是否包含适当的 ViewModel,如果不存在则创建一个。然后使用所述 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));
然后在 NewsItemView 的 OnNavigatedTo 方法中执行以下代码,该方法检查 NewsItemViewModel 是否存在(它应该存在,因为它刚刚创建),然后将其拉出容器。
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;
}
当我尝试在 Silverlight 5 中做同样的事情时(几乎完全是项目的移植),我注意到 SimpleIoc.Default.Contains 方法不存在,但类似的 ContainsCreated(string key) 确实存在。
当我尝试使用这种新方法时,布尔检查总是返回 false,因此导航失败(我收到“未找到项目”消息框)。
下面是我如何重写违规行的示例
if (!SimpleIoc.Default.ContainsCreated<NewsItemViewModel>(itemUrl))
我在这里想念什么?任何帮助都会很棒!
克里斯