簡體   English   中英

如何使用參數將View綁定到ViewModel

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

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