WPF+Prismでボタン押下時のイベントハンドラを実装する

csharp C#

この記事の内容

この記事では、WPF+PrismでView側でボタンを押下した場合に、ViewModel側へイベントを通知して、ViewModel側のイベントハンドラを実行する方法を紹介します。

Windows Formの場合は、コードビハインドで実装することが多いと思いますが、MVVMの場合はコードビハインドで記載せずに、ViewModel側にイベントハンドラにあたるコマンドを実装していきます。

まずは、実装方法を紹介したのち、イメージを解説したいと思います。

実装方法

今回は、テスト用にボタンを1つ用意して、ボタン押下時にウィンドウのタイトルを変更するプログラムを作成します。

View側のXamlに<Button Content=”テストボタン” Command=”{Binding TestCommand}”/>を追加します。

ラベルのデータバインディングと似てますが、Commandに対してバインディングするという点が違います。

Bindingの後は、ViewModelに記載する、プロパティ名を記載します。このプロパティに関しては次に実装します。

コマンドの実装は以下の様に行います。

using Prism.Commands;
using Prism.Mvvm;

namespace WPFSample.ViewModels
{
    public class MainWindowViewModel : BindableBase
    {
        private string _title = "Prism Application";
        public string Title
        {
            get { return _title; }
            set { SetProperty(ref _title, value); }
        }

        public DelegateCommand TestCommand { get; }

        public MainWindowViewModel()
        {
            TestCommand = new DelegateCommand(ExecuteTestCommand);
        }

        private void ExecuteTestCommand()
        {
            Title = "テストコマンドが実行されました";
        }
    }
}

public DelegateCommand TestCommand { get; }にView側でバインディングするコマンドのプロパティを定義します。DelegateCommandはPrismのクラスになります。

コンストラクタで、TestCommandプロパティにDelegateCommandインスタンスを設定します。この時、イベントハンドラになるExecuteTestCommandメソッドを指定します。

ExecuteTestCommandがイベントハンドラになり、ここでボタンが押下された際の動作を記入します。ここでは、ウィンドウのタイトルを変更するようにしています。

ボタン押下後は以下の様にタイトルが変更されます。

動作イメージ

動作のイメージは以下の通りです。

コメント