簡體   English   中英

在MVVM中更改視圖

[英]Changing a view in the MVVM

如果我的MainWindow具有以下代碼:

<Window x:Class="DaveMVVM.View.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:viewModel ="clr-namespace:DaveMVVM.ViewModel"
        xmlns:view="clr-namespace:DaveMVVM.View"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Resources>
            <viewModel:MainWindowViewModel x:Key="Vm" />
        </Grid.Resources>        
        <view:MyFirstView />        
    </Grid>   
</Window>

那么我可以假設我無法從MyFirstView更改視圖...例如,我希望MainWindow只是一個實際上只承載Menu的框架,並且取決於它們從Menu選擇的選項取決於顯示視圖。

所以,我的兩個問題是

1)我認為上述示例由於對視圖進行了硬編碼而無法工作,因此我認為是正確的。
2)我必須使用綁定到MainWindowViewModel的DataTemplates,然后為每個View創建一個DataTemplate嗎?

謝謝。

您可以按照以下步驟進行操作:

您的MainWindowViewModel公開了一個CurrentContent屬性。 它返回所有視圖模型的通用基本類型:

public ViewModelBase CurrentContent
{
    get { return _currentContent; }
    private set
    {
        if(value == _currentContent)
            return;

        _currentContent = value;
        RaisePropertyChanged("CurrentContent");
    }
}

根據用戶的選擇,您可以將該屬性設置為相應的視圖模型。

您的主視圖將包含與此屬性綁定的ContentControl

<ContentControl Content="{Binding CurrentContent}" />

最后,您的視圖(或單獨的資源字典)將必須包含每個可能的內容視圖模型的數據模板:

<DataTemplate DataType="{x:Type MyFirstViewModel}">
    <view:MyFirstView /> 
</DataTemplate>
<DataTemplate DataType="{x:Type MySecondViewModel}">
    <view:MySecondView /> 
</DataTemplate>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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