2009-11-17 102 views
4

我的問題實際上是關於使用MVVM啓動應用程序:使用MVVM管理複雜的UI

我的主屏幕將託管許多屏幕。我明白他們將是UserControls。

但我沒有看到我在哪裏實例化,然後當我想要,當我展示他們,當我隱藏他們?

邏輯不清楚。有人可以解釋我或指出我一個簡單明瞭的例子嗎?

感謝 約翰

回答

2

想象一下,你有一個MainViewModel綁定到主屏幕。讓MainViewModel是一個單例類,它有一個'CurrentViewModel'屬性(INotifypropertyChanged實現)。現在,您可以實例化任何具體的視圖模型(基於命令/點擊)並分配實例如下

MainViewModel.Instance.CurrentViewModel = new SomeViewModel();

所以,現在你的主屏幕XAML將有

<Window> 
    <ContentControl Content="{Binding CurrentViewModel,Source={x:static vm:MainViewModel.Instance}}" 
</Window> 

您需要定義適當的每個ViewModels的DataTemplates(View to ViewModel Mapping)。這看起來像

<DataTemplate DataType="{x:Type vm:SomeViewModel}"> 
    <view:SomeView/> 
</DataTemplate> 

這裏SomeView是UserControl對應的SomeVieModel。

希望這可以很簡單地解釋MVVM架構

+0

非常好的開始。爲什麼我需要DataTemplate? – user96547 2009-11-17 21:59:02

+0

因爲這是WPF決定用哪個用戶控件ViewModel類需要實例化的方式。在您的應用程序中將會有很多DataTemplate聲明。主要在資源文件(或App.xaml) – 2009-11-17 22:03:01

+0

這使我困惑,因爲我認爲綁定到視圖將是足夠的。你知道我可以看的完整(簡單)樣本嗎? – user96547 2009-11-17 22:05:30