1

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 から View を変更できないと仮定できますか...たとえば、MainWindow を実質的に のみをホストするフレームにしたいMenu場合、選択したオプションに応じて、MenuView が何であるかに依存します表示されます。

だから、私の2つの質問は

1) View がハードコーディングされているため、上記の例は機能しないと考えているのは正しいですか。
2) MainWindowViewModel にバインドされている DataTemplates を使用し、ビューごとに DataTemplate を作成する必要がありますか?

ありがとうございました。

4

1 に答える 1

1

これは次のように行います。

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>
于 2013-02-26T14:09:09.220 に答える