[英]How to bind View to ViewModel with parameters
如果我使用這種構造的觀點。 如何將一些數據傳遞給DataEditViewModel
?
<Window x:Class="DataEditView">
<Window.DataContext>
<local:DataEditViewModel />
</Window.DataContext>
<Grid>
<!-- ... -->
</Grid>
</Window>
在其他一些視圖模型中,我可以這樣稱呼:
public void EditCommandExecute() {
var edit = new DataEditViewModel(this._data);
edit.Show();
}
然后在DataEditView
構造函數中的代碼后面:
public DataEditView(DataObjectTm dt){
InitializeComponent();
DataContext = new DataEditViewModel(dt);
}
我的解決方案有效,但是一旦在XAML中設置了DataContext
,然后在后面的代碼中,便有了重復的代碼。
如果您需要為View Model構造函數使用參數,那么,如果您希望將設計時數據與運行時數據分開,則必須使用某種類型的依賴項注入和服務,將數據傳遞給ViewModel。從視圖模型中獲取數據確實不利於測試,因為在對您的ViewModel進行單元測試時,它將實際上打開一個窗口,這不是您想要的。
我建議您研究某種IOC容器。 MVVM-Light具有非常簡單的功能,但是需要做一些工作才能了解它的功能以及使用方式。 那將是我的建議。
使用此功能,您可以創建一個“設計時”和“運行時”界面,並在運行時中傳遞正確的數據(可能來自數據庫),並在設計時發送靜態數據。 而且,在測試時,您將不會打開視圖,而只是檢查是否已發送和接收了打開視圖的調用。 希望能有所幫助。
這是一個示例,說明了如何在啟動新ViewModel時將其傳遞給新ViewModel的最佳方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.