0

私がやろうとしていることは非常に単純ですが、間違った方法で実行しようとしている可能性があります。基本的に、同じウィンドウ内から異なるビューを表示する方法が必要です。私が今持っているものの例はこれです:

<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="800" Width="800"
        DataContext="{Binding Source={StaticResource Locator}, Path=MainPageViewModel}">
    <Grid>
        <ContentPresenter Content="{Binding SelectedView}"/>
    </Grid>
</Window>

上記のように、SelectedView で UserControl を別のものに設定することで、UserControl を変更できるようになりました。ただし、これはMVVMに違反する可能性があると思います。私が何をしようとしているのかがわかったので、より良い方法があればお勧めします。私は単にアプリケーション内に別のビューを作成しようとしているだけで、ウィンドウなどをさらに生成する必要はありません.

4

1 に答える 1

1

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 のポイントは、プレゼンテーションをコードから分離することであるため、両方を一緒にしないでください。

于 2013-03-20T20:41:50.897 に答える