2011-07-23 115 views
0

我正在開發Windows Phone 7應用程序並使用MVVM模式。我需要傳遞一個參數給頁面的ViewModel的構造器。我所有的數據上下文和綁定都是在XAML中完成的。通過我的研究,我已經看到,我需要使用依賴注入器(如NInject)來做到這一點。NInject:將參數發送到ViewModel類構造函數

下面是關於發生了什麼的一點細節: 我有一個頁面ListPicker列出各種任務。每個任務都有一個唯一的TaskID。當選擇一個項目時,我需要打開另一個頁面來顯示選定的任務細節。我ViewModel和綁定全部完成,如果我在ViewModel中使用靜態TaskID,但當然我需要使用一個變量。

我設置NInject項目,需要如ViewModelLocator和我NInjectModule各種類別如下所示:

public class LighthouseNInjectModule : NinjectModule 
{ 
    public override void Load() 
    { 
     this.Bind<TaskViewModel>().ToSelf().WithConstructorArgument("TaskID", 2690); 
    } 
} 

請注意,我這裏有一個硬編碼和的TaskID使用此代碼這個價值得到正確注入到我的構造函數中。當然,這是硬編碼的,我需要爲選定的ListPicker項目獲取TaskID。我知道如何從ListPicker中獲取選定的ID,但是如何讓NInject知道它,所以當我的類構造函數運行時它將具有正確的值?

這是我的ViewModel類的基本定義,顯示了使用Injector屬性。

public class TaskViewModel : INotifyPropertyChanged 
{ 
    [Inject] 
    public TaskViewModel(int TaskID) 
    { 
     //run function to get data using TaskID 
    } 
} 

回答

1

WithConstructorArgument具有接受一個懶惰評價Func<Context, object>另一個oveload。

+0

感謝您的迴應雷莫。我已經在GitHub上爲Ninject做了一切工作,並且在這裏看看如何以及在哪裏實現,但是已經空了。 Ninject的文檔非常薄,我希望有一本好書可以解釋一切。有沒有人有樣品? – Walter

+0

@Waltedbn:你能解釋你正在使用哪個版本?你有困難嗎?雷莫的方法是正確的,並且從記憶中可以看出,超載已經在Ninject很長一段時間了。你沒有看到過載?你在看什麼?除非您能詳細說明您的確切問題,否則我們不能再多談談。重新推薦.NET書中的依賴注入,儘管它不包含Ninject。如果你閱讀了這個和Ninject的wiki,你會得到足夠的信息。 (並不是說維基是完美的 - 它取決於你需要的介紹材料/ ninject細節的混合以及它遠非完美) –

+0

感謝這本書的推薦。 Theres在8月底推出了一個新版本,我已經下了訂單。至於我目前的問題,我看到以「string name,Func callback」作爲參數的重載。 我遇到問題的地方是回調參數。我假設需要在viewModel中具有需要發送到第二個viewModel的ctor的值的函數。 – Walter

相關問題