++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

コードスニペットを使った INotifyPropertyChanged の実装(再度更新)

with 4 comments

ソースコード、dll、snippet ファイル詰め合わせ

前回からの更新:

  • プロパティ名、internal static readonly の方がよかった
  • 補助関数とか、dll 化
  • ついでに MVVM でよく使う DelegateCommand とか、依存プロパティ用のコードスニペットも追加
    • 正直、結構な割合車輪の再発明

以下、サンプル:

class Sample : DependencyObject, INotifyPropertyChanged
{
    public int X
    {
        get { return (int)GetValue(XProperty); }
        set { SetValue(XProperty, value); }
    }

    public static readonly DependencyProperty XProperty =
        DependencyPropertyHelper<Sample>.Register(_ => _.X);

    #region Y

    public double Y
    {
        get { return _Y; }
        set
        {
            _Y = value;
            PropertyChanged.Raise(this, YName);
        }
    }

    private double _Y;
    internal static readonly string YName = PropertyName<Sample>.Get(_ => _.Y);

    #endregion
    #region SampleCommand

    private void SampleCommandHandler(object parameter)
    {
        throw new NotImplementedException();
    }

    public ICommand SampleCommand
    {
        get
        {
            if (_SampleCommand == null)
                _SampleCommand = new DelegateCommand { CommandHandler = this.SampleCommandHandler };
            return _SampleCommand;
        }
    }
    private ICommand _SampleCommand;

    #endregion

    public event PropertyChangedEventHandler PropertyChanged;
}

Written by ufcpp

2010年2月2日 @ 09:49

カテゴリー: C#

4件のフィードバック

Subscribe to comments with RSS.

  1. すみません、質問があるのですがよろしければ教えていただけないでしょうか。

    この記事のソースコードに含まれていたViewModelCommandの用途がわかりませんでした。
    「ViewModel内でよく使う」とコードに書かれていて、さらにプロパティとしてVMを持っています。

    ですが、MVVM開発をしていてそういった場面に遭遇していませんでした。
    私の開発パターンが間違っているのか、これを知るととても便利なことになるのか、ヒントを頂けると助かります。
    宜しくお願い致します。

    しみみん (@KatsuYuzu)

    2011年12月23日 at 10:34

    • ああ、DelegateCommandがあれば不要なものですね。
      デリゲートを外から射すんじゃなくて、Executeをオーバーライドして実装したいときに使います。

      ufcpp

      2011年12月23日 at 11:14

  2. ありがとうございます。

    VMを引き渡してExecuteの中でVMのMethodを呼ぶような感じでしょうか。

    > ああ、DelegateCommandがあれば不要なものですね。
    たしかに、上記の様な感じであればActionを引き渡すDelegateCommandの方が汎用的で便利ですね。

    お答えいただきありがとうございました。

    しみみん (@KatsuYuzu)

    2011年12月23日 at 12:29

  3. […] ある人はT4テンプレートで自動生成し、ある人はヘルパークラスを作成し、またある人はVS拡張のデザイナーを作ったりしています。 […]


コメントを残す