いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

DevExpress奮闘記-109 (CodeRushを使ってINotifyPropertyChangedインターフェース実装クラスを手軽に作成, Paste Event Trigger)

今回は、CodeRushを利用したちょっとしたTips。
個人的によく利用している機能です。


アプリを作成する際、データの変更通知を受け取りたい場合
.NETでは、INotifyPropertyChangedインターフェースを実装します。


で、このINotifyPropertyChangedインターフェースなんですが
個人的に結構作成するのが面倒です。んで、CodeRushを使うと
ちょっと楽に作成できますという内容です。


以下、画像張りながら記述します。
まず、対象となるクラスを作成します。
CodeRushを使っている場合は、「c」をタイプしてスペースを押すと
テンプレートが展開されます。以下のような感じです。



次に、展開されたクラスにINotifyPropertyChangedをインターフェースとして付与して
実装すべきメンバーを定義.

ここから先は、PropertyChangedイベントを発生させるメソッド (OnPropertyChangedという名前によくします。)を作成して
プロパティのsetterに値が変更されていればOnPropertyChangedを呼び出すように設定します。
通常、setter部分は以下のようになります。

public string Name
    {
      get { return _name; }
      set
      {
        if (_name == value)
        {
          return;
        }

        _name = value;
        OnPropertyChanged(new PropertyChangedEventArgs("Name"));
      }
    }

面倒なのは、この部分ですのでCodeRushの力をちょっと借りてさくっと作成していきます。


まず、イベントを発生させるメソッドのOnPropertyChangedの作成ですが
CodeRushには、イベントトリガメソッドを貼り付け時に自動作成してくれる機能があるのでそれを利用。


まず

public event PropertyChangedEventHandler PropertyChanged;

を行選択して、コピー (Ctrl+C)します。
後は、クラス内のどこでもいいので、そのまま貼り付けます。(Ctrl+V)
すると、以下のようにイベントトリガメソッドが生成されます。

後は、イベントを発生させる部分が

PropertyChanged(null/*this*/, ea);

ってなっているので、望みのsenderに変えてやります。大抵はコメントアウトを外せばオッケイでしょう。


これで、トリガメソッドが出来たので、後はプロパティを量産していけばオッケイです。
CodeRushでは、プロパティを作成するには、「p型値 + スペース」とすればプロパティが生成されます。
stringのプロパティの場合は、「ps」です。で、プロパティが生成される際、対象となるクラスが
INotifyPropertyChangedを実装していると、自動的にイベントをトリガするsetterが生成されます。


後は必要な分、プロパティを定義すれば完了です。




================================
過去の記事については、以下のページからご参照下さい。