2013-11-02 71 views
0

到視圖模型如果我使用這種結構的視圖。我如何將一些數據傳遞給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,然後在代碼後面。

+0

什麼'_data'類型的例子嗎?如果你可以參考在'XAML'代碼_data'的'一個實例,我們可以創建'DataEditViewModel'一些'_data'傳入你的'XAML'代碼 –

+0

想如果你想傳遞參數,然後簡單地忽略聲明來自XAML,並且像代碼一樣在代碼背後做這件事。那麼爲什麼要在XAML中做到這一點? –

回答

1

如果您需要View Model構造函數的參數,那麼您將不得不使用某種類型的依賴注入,並且如果您希望將設計時間數據與runTime數據分開,則需要使用某種服務將數據傳遞給ViewModel。 ,從視圖模型中打開一個視圖對於測試來說是非常糟糕的,因爲在單元測試你的ViewModel時,它實際上會打開一個窗口,這不是你想要的。

我建議你看看某種IOC容器。 MVVM-Light有一個非常簡單的方法,但需要一些工作來理解它的作用以及如何使用它。這將是我的一個開始的建議。

使用這個,你可以創建一個設計時和運行時的界面,當在運行系統中(從DB可能)通過你的正確的數據,並在設計時,你發送的靜態數據。而且,在測試時,您不會打開視圖,您只需檢查是否已發送和接收打開視圖的呼叫。希望有所幫助。

這裏是我是如何做到這Best Way to Pass Data to new ViewModel when it is initiated