ホームページ > バックエンド開発 > C++ > 外部フレームワークを使用せずに WPF MVVM でシンプルなビュー ナビゲーションを実装するにはどうすればよいですか?

外部フレームワークを使用せずに WPF MVVM でシンプルなビュー ナビゲーションを実装するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-26 20:41:14
オリジナル
629 人が閲覧しました

How to Implement Simple View Navigation in WPF MVVM without External Frameworks?

WPF MVVM で単純なビュー ナビゲーションを実装します (外部フレームワークは必要ありません)

WPF MVVM アプリケーションのビュー ナビゲーションにより、異なるユーザー インターフェイス間で切り替えることができます。この記事では、MVVM Light などのフレームワークに依存せずにナビゲーションを実装する簡単な方法を検討します。

ビューモデルの設定

ベース ビュー モデル クラスを作成し、パブリック プロパティと INotifyPropertyChanged インターフェイスを定義します。各具体的なビューモデル (例: MainViewModelPersonViewModelCompanyViewModel) は、基本クラスから継承する必要があります。

ビューを View Model に接続します

App.xaml で、ビューを View Model に関連付けるデータ テンプレートを宣言します。これにより、指定されたビュー モデルに基づいて適切なビューがレンダリングされます。

ContentControl でビューモデルを表示

メイン ビューの ViewModel 属性にバインドされた ContentControl を使用して、さまざまなビューを表示します。ビューモデルを変更すると、表示されるビューが切り替わります。

サブビューからの移動

サブビューから移動するには、メイン ビュー モデルでコマンドを作成し、それをサブビューのボタンにバインドします。このコマンドを実行すると、メイン ビュー モデルの ViewModel プロパティが変更され、ビューの切り替えがトリガーされます。

コード例

BaseViewModel:

<code class="language-csharp">public class BaseViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
}</code>
ログイン後にコピー

MainViewModel:

<code class="language-csharp">public class MainViewModel : BaseViewModel
{
    private BaseViewModel viewModel;
    public BaseViewModel ViewModel
    {
        get { return viewModel; }
        set { viewModel = value; OnPropertyChanged(nameof(ViewModel)); }
    }

    public ICommand DisplayPersonView { get; }

    public MainViewModel()
    {
        DisplayPersonView = new RelayCommand(() => ViewModel = new PersonViewModel());
    }

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

public class RelayCommand : ICommand
{
    private readonly Action execute;
    public event EventHandler CanExecuteChanged;

    public RelayCommand(Action execute)
    {
        this.execute = execute;
    }

    public bool CanExecute(object parameter) => true;
    public void Execute(object parameter) => execute();
}</code>
ログイン後にコピー

App.xaml (DataTemplates):

<code class="language-xml"><Application.Resources>
    <DataTemplate DataType="{x:Type ViewModels:MainViewModel}">
        <views:MainView/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type ViewModels:PersonViewModel}">
        <views:PersonView/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type ViewModels:CompanyViewModel}">
        <views:CompanyView/>
    </DataTemplate>
</Application.Resources></code>
ログイン後にコピー

使用例:

<code class="language-xml"><ContentControl Content="{Binding ViewModel}"/></code>
ログイン後にコピー

この例では、INotifyPropertyChanged インターフェースと単純な RelayCommand クラスの実装が必要であることに注意してください。 OnPropertyChanged メソッドと RelayCommand クラスは、プロジェクトの実際の状況に応じて調整または置き換える必要があります。 views: プレフィックスはビューの名前空間を表します。 ビューとビューモデルが正しく定義され、関連付けられていることを確認してください。

以上が外部フレームワークを使用せずに WPF MVVM でシンプルなビュー ナビゲーションを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート