51

複数のビューを持つ WPF アプリケーションがあります。ビュー 1 からビュー 2 に切り替えたいのですが、そこから複数のビューに切り替えることができます。したがって、同じウィンドウにview2をロードするビュー1のボタンが必要です。

私はそれらのことを試しましたが、うまくいきません。

最初のリンクから、問題は ViewModelLocator コードを理解していないことです。彼らはCreateMain();関数を呼び出しますが、これはどこで定義されており、ビュー内から別のビューに切り替えるにはどうすればよいですか。

4

4 に答える 4

8

私が最初に MVVM を使い始めたとき、さまざまな MVVM フレームワーク、特にナビゲーション部分にも苦労しました。したがって、Rachel Lim が作成した、私が見つけたこの小さなチュートリアルを使用します。とても親切で、説明も丁寧です。

次のリンクでそれを見てください。

それがあなたを助けたことを願っています:)

于 2013-10-29T09:41:29.260 に答える
1

たぶん、このリンクが役に立ちます。NavigateToウィンドウに表示する必要があるビューにプロパティを設定するだけです。

例として、次のようなことができます

<Window x:Class="MainWindowView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                                 xmlns:meffed="http:\\www.codeplex.com\MEFedMVVM"
                                 meffed:ViewModelLocator.NonSharedViewModel="YourViewModel"
                                 WindowStartupLocation="CenterScreen">

    <Button meffed:NavigationExtensions.NavigateTo="firstview"
                    meffed:NavigationExtensions.NavigationHost="{Binding ElementName=_viewContainer}"
                    meffed:NavigationExtensions.NavigateOnceLoaded="False"
                    Visibility="Visible" />

    <ContentControl x:Name="_viewContainer" Margin="0,0,0,10" />
<Window>

次に、クラスファイルは次のようになります

public partial class MainWindowView : Window
{
    public MainWindowView()
    {           
              InitializeComponent();
    }

        public ContentControl ViewContainer { get { return _viewContainer; } }

    }

次に、各ビューを として定義UserControlし、上記のリンクを使用してボタンの をバインドできますmeffed:NavigationExtensions.NavigateTo="secondView"。をターゲットにするContentControlには、バインディングWindowを使用するだけです。RelativeSource例えば

meffed:NavigationExtensions.NavigationHost="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}},Path=ViewContainer}"

それぞれのビューで、コード ビハインド クラス定義に などの注釈を付けていることがわかります[NavigationView("firstview")]

初めては複雑ですが、考え方が分かればとても簡単です。

于 2013-10-30T09:09:29.277 に答える
1
<ContentControl x:Name="K.I.S.S" Content="{Binding ViewModel, Converter={StaticResource ViewLocator}}"/>
于 2016-04-11T02:17:36.443 に答える