MVVMはそうかもしれませんし、そうでないかもしれません。MVVM では、ViewModel をコードとして設定し、リソース ライブラリを実行して、それがビュー モデルに関連していることをビューに伝えます。あなたがしていることは単なる束縛です。「MainWindow」の背後にあるコードですべてのコードを実行している場合、これはほとんど MVVM に違反しています。
いくつかのビューを作成して表示することもできます。私はさまざまなドッキング パネルを信じています。私はMVVMを使い始める前にこれを行っただけで、一度に1つずつしか表示しませんでしたが、もっと簡単にできると思います.
XAML:
<DockPanel x:Name="MainDock" LastChildFill="True">
<StackPanel DockPanel.Dock="Top">
<StackPanel.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="#FF759FCB" Offset="1" />
</LinearGradientBrush>
</StackPanel.Background>
<Menu Background="Transparent" >
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1"/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Grid.Column="0" x:Name="mnuBasic" Header="Basic Batch" Click="mnuBasic_Click" />
<MenuItem Grid.Column="1" x:Name="mnuImages" Header="Image List" Click="mnuFENSImages_Click" />
<MenuItem Grid.Column="2" x:Name="mnuReRender" Header="ReRender Batch" Click="mnuReRender_Click"/>
</Menu>
</StackPanel>
<DockPanel x:Name="dockcontent" DockPanel.Dock="Right" />
</DockPanel>
次に、'dockcontent' と呼ばれる部分に、メニュー項目がクリックされたデータを入力します。ドッキングを設定するためのコード ビハインドのサンプル:
Exporter exp = new Exporter(); //constructor args if needed, this is a user control
dockcontent.Children.Clear(); // clear the dockpanel so nothing already exists
dockcontent.Children.Add(exp); // populate the dock with my user control
複数の画像を作成する複数の方法でこれを行うことができると思います。オブジェクトが適切なコンテキストのビューである限り、XAML で直接期待どおりのバインドを行うことができます。
過度のコード ビハインドは、基本的に MVVM にまったく準拠していないことを覚えておいてください。MVVM のポイントは、プレゼンテーションをコードから分離することであるため、両方を一緒にしないでください。