2012-07-03 48 views
0

我一直在處理簡單的MVVM模式,並從此更多地深入瞭解WPF數據綁定的全部功能。我遇到了一個問題,我似乎無法將我的頭圍繞。採取以下MainWindowViewModel代碼起動器:WPF MVVM多視圖問題,使用ListBox.SelectedItem

ObservableCollection<DataRecord> _SomeData = new ObservableCollection<DataRecord>(); 
public ObservableCollection<DataRecord> SomeData 
{ 
    get 
    { 
     return _SomeData; 
    } 
    set 
    { 
     _SomeData = value; 
    } 
} 

public MainWindowViewModel() 
{ 
    CurrentViewModel.Add(new RandomViewModel(SomeData)); 
} 

相反粘貼的代碼的全部長度,我已綁定列表框來ViewModelBase的一個ObservableCollection <>,參照每個鹼基添加(圖像導航)的圖像屬性。現在!對於問題:

我正在使用DataTemplate從ViewModel引用視圖,使用從ListBox.SelectedItem返回的字符串。因爲RandomViewModel需要傳遞參數,所以無論何時單擊ListBox.SelectedItem,都會實例化一個新的View,而不是在ListBox中創建的View。這種情況發生的原因很簡單,新的View需要一個RandomViewModel來引用數據綁定。所以!對於ViewModel/View Navigation使用臭名昭着的ListBox.SelectedItem,即使ViewModel需要傳遞參數,我該如何創建View並仍然引用其ViewModel?要麼!我該如何使用已經實例化的ViewModel並將其用作新創建的View的引用?

+0

我真的不明白你有什麼。 – MBen

+0

我以爲這個問題有足夠的重量,我猜不是!你錯過了什麼可以幫助回答這個問題? – user1280092

回答

1

我不明白爲什麼每個人都先做MVVM。我首先使用視圖僅用於根/主窗口,也許是登錄對話框。對於應用程序的其餘部分,我根本不關心view/xaml,並採取Viewmodel首先的方法。這對於mvvm來說非常簡單。在你的情況下,你的mainviewmodel像你一樣處理randomviewmodel的列表。但現在不必創建隨機視圖並分配randomviewmodel,只需將選定的randomviewmodel綁定到contentpresenter即可。 wpf會查看你的資源,找到一個數據模板來「我應該如何呈現這個randomviewmodel」,並且你看到你想要的視圖。每次創建視圖的新實例時,都會收到相同的視圖模型,但始終採用相同的視圖模型。

這就是mvvm對我來說:不關心你的意見只是處理你的viewmodels的權利。