LoginSignup
1
1

More than 1 year has passed since last update.

Prism コードサンプル学習:13-IActiveAwareCommands

Posted at

Prism コードサンプル学習:13-IActiveAwareCommands

はじめに

以下の記事の続きです。
https://qiita.com/mngreen/items/62280f71acf9eeb96fcd

13-IActiveAwareCommands

本サンプルは、前回の記事のCompositeCommandsのプログラムがベースとなっていますが、振る舞いが異なります。

  • 前回の場合、上部のボタンを実行するとすべてのビューのコマンドが実行される
  • 今回の場合、上部のボタンを実行すると表示されているビューのコマンドのみ実行される

上記の振る舞いの差がどこで生まれているかを以下で確認します。

  • 1箇所目の差分は、CompositeCommandのコンストラクター引数にtrueが渡されていた点です。
    • コンストラクターにtrueが渡されると_monitorCommandActivityフィールドに値が渡されます。(該当コード
    • _monitorCommandActivityフィールドに値が渡ると、ShouldExecuteメソッドで実行すべきか否かが判定されるようになります。
  namespace UsingCompositeCommands.Core
  {
      public interface IApplicationCommands
      {
          CompositeCommand SaveCommand { get; }
      }

      public class ApplicationCommands : IApplicationCommands
      {
          private CompositeCommand _saveCommand = new CompositeCommand(true);
          public CompositeCommand SaveCommand
          {
              get { return _saveCommand; }
          }
      }
  }
  • 2箇所目の差分は、TabViewModelクラスがIActiveAwareインターフェイスを実現していた点です。
    • TabViewModel.IsActivateプロパティが変更されると、コマンドのIsActivateも同時に変わります。
    • 過去記事で読み進めた通り、TabControlが切り替わるタイミングでTabViewModel.IsActiveプロパティが切り替わると思われます。
  namespace ModuleA.ViewModels
  {
      public class TabViewModel : BindableBase, IActiveAware
      {
          // ... ここまで前回サンプルと同じコード ...

          bool _isActive;
          public bool IsActive
          {
              get { return _isActive; }
              set
              {
                  _isActive = value;
                  OnIsActiveChanged();
              }
          }
          private void OnIsActiveChanged()
          {
              UpdateCommand.IsActive = IsActive;

              IsActiveChanged?.Invoke(this, new EventArgs());
          }


          public event EventHandler IsActiveChanged;
      }
  }
  • TabControlが切り替わり、コマンドのIsActiveプロパティが表示されているもの以外はfalseになるので、結果として表示されているViewのコマンドのみが実行されています。

おわりに

今回はIActiveAwareCommandsと前回記事の差分を確認することで、利用方法を学びました。
このコマンドを利用すれば、表示されているビューのコマンドのみ実行させることができそうですね。
次回、14-UsingEventAggregatorについて見ていこうと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1