[英]MVVMlight not adding ViewModels to SimpleIoc in Silverlight 5
我正在使用MVVM燈構建Silverlight 5應用程序,並且我正在嘗試實現Navigation。
在Laurent在他的Mix 11 talk(針對SL4)中構建的Silverlight 4示例中,他使用以下代碼檢查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(字符串鍵)。
當我嘗試使用這個新方法時,bool檢查總是返回false,結果導航失敗(我得到“Item Not Found”消息框)。
我如何重寫違規行的一個例子如下
if (!SimpleIoc.Default.ContainsCreated<NewsItemViewModel>(itemUrl))
我在這里想念的是什么? 任何幫助都會很棒!
短劍的一種
如何使用
SimpleIoc.Default.IsRegistered<NewsItemViewModel>(itemUrl)
我一直在使用GetInstance(key)創建它,如果尚未創建它,但它首先需要注冊,上面將確認。
雖然您可能想也可能不想使用密鑰 - 因為它會檢查類型和密鑰組合,但我認為只要
SimpleIoc.Default.IsRegistered<NewsItemViewModel>()
返回true,然后您應該能夠使用密鑰使用GetInstance
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.