2010-06-13 25 views
0

我已經開始使用mvvm-light工具包,並且是WPF的新手。如何根據命令請求創建和顯示視圖?

我的問題是: 我想創建一個應用程序,其中主窗口包含一個帶有2列的網格1 col命令和col2將在每個命令被按下時顯示視圖。 我想要在命令上創建視圖並從它自己的視圖中隱藏視圖。

我試圖找出如何去做,但沒有成功。

我不知道如何使用mvvm light編寫這種funconality。

我只是知道如何創建主窗口與主視圖和另一個視圖已經加載已建立。

請幫我..

我使用的是2008年WPF3.5

Shirly。 今天讓我開心..我剛剛開始一週!

ThankU。我已經完成了,並得到當前ViewModel「LU.ViewModel.AllChannelsViewModel」的Tostring()而不是真實視圖。

查看我要加載的是: 我使用的MVVM光

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="30" /> 
     <RowDefinition Height="30" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 

    <Button Grid.Row="0" Height="22" HorizontalAlignment="Right" Margin="8,4,0,0" Name="closebutton" VerticalAlignment="Top" Width="100" Command="{Binding CloseCommand}">Close</Button> 
    <Button Grid.Row="1" Height="22" HorizontalAlignment="Left" Margin="8,4,0,0" Name="button1" VerticalAlignment="Top" Width="100" Command="{Binding GetChannelsCommand}">Load Channels</Button> 
    <Button Grid.Row="1" Height="22" HorizontalAlignment="Right" Margin="8,4,0,0" Name="button2" VerticalAlignment="Top" Width="100" Command="{Binding NewChannelCommand}">New Channel</Button> 
    <dg:DataGrid Grid.Row="2" ItemsSource="{Binding AllChannelsData}" Margin="0,30,0,0" /> 


</Grid> 

什麼我錯過這裏?我如何顯示我想要的真實視圖而不是viewmodel的名稱?

Shirly

回答

2

我不知道是否有具體的事情做,與MVVM光,但一個共同的方式來創建在MVVM一個觀點是建立一個綁定到視圖模型的財產ContentControl 。當你影響一個新視圖模型,以該財產時,ContentControl使得它使用相匹配的視圖模型的類型DataTemplate

<!-- In resources --> 
<DataTemplate DataType="{x:Type vm:FooViewModel}"> 
    <v:FooView /> 
</DataTemplate> 

<DataTemplate DataType="{x:Type vm:BarViewModel}"> 
    <v:BarView /> 
</DataTemplate> 
... 

<!-- In the main view --> 

<ContentControl Content="{Binding Current}" /> 
+0

我認爲這個人意味着創建一個視圖,通過命令打開。 – 2011-12-01 17:26:03

+0

@Brian,你*認爲*,但你不知道*,並且OP從未回來證明你是錯的或正確的,所以我認爲它不值得贊成... – 2011-12-01 18:19:51

+0

Thomas,謝謝你你的迴應。當我使用這個詞時,認爲它應該是禮貌的,而不是要知道這一切。他們寫的文字明確指出:「......在按下每個命令時顯示視圖,我希望視圖在命令上創建......」這種性質表明他們想要單擊一個與一個打開視圖的命令。同樣,他們的xaml包含兩個按鈕,這表明他們瞭解如何創建視圖。所以,我支持我的投票。如果它冒犯了你,我很抱歉。 – 2011-12-01 20:12:41

0

請原諒我給你一個選擇,是不是在MVVM光工具包,但我已經沿着你的道路,並選擇使用棱鏡這個原因。我沒有時間進入棱鏡或事件聚合的細節,但該工具你會:

  1. 在您的視圖模型創建一個ICommand,你會你的按鈕或事件綁定到
  2. 你執行的命令會使用publish方法調用事件聚合器。這是您已經在虛擬機之外設置並且正在等待被調用的事件。當被調用時,事件會顯示您的表單。您甚至可以將屬性或其他虛擬機傳遞給事件。這可以讓你的虛擬機不知道視圖。

最後,MVVM對我來說很棒,但它會爲您提供諸如此類的許多挑戰。不要期望在一天之內征服它,或者快速創建應用程序,但是當你獲得所有東西時,這是一個很好的範例。

相關問題