簡體   English   中英

MVVMlight沒有將ViewModels添加到Silverlight 5中的SimpleIoc

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM