変更通知用のINotifyPropertyChangedとコマンド用のICommand実装クラスが提供されています。
INotifyPropertyChangedの実装クラス
BindableBaseクラスになります。SetPropertyというメソッドがあって、変更通知プロパティを以下のように定義できるようになっています。
private int hoge; public int Hoge { get { return this.hoge; } set { this.SetProperty(ref this.hoge, value); } }
この他に、指定したプロパティの変更通知ができるOnPropertyChangedメソッドなど、MVVMでアプリ書いたことがある人ならだれもが一度は実装したことあるようなおなじみのメソッドがあります。
ICommandの実装クラス
DelegateCommandクラスになります。コンストラクタの引数にExecute時に呼ばれる処理と、CanExecute時に呼ばれる処理を渡します。
this.HogeCommand = new DelegateCommand(this.HogeExecute, this.CanHogeExecute);
CanExecuteの変更通知に関してはRaiseCanExecuteChangedメソッドで行います。
this.HogeCommand.RaiseCanExecuteChanged();
RaiseCanExecuteChangedを呼ぶのは大体プロパティの変更タイミングなので、そういうケースに対応するためにObservePropertyというメソッドも定義されていたりします。式木で、プロパティを渡すことで、渡したプロパティが変更があったときにRaiseCanExecuteChangedを自動で呼び出してくれるようになります。 例えば、Titleプロパティが変わったときにRaiseCanExecuteChangedが呼ばれるようにするには以下のように書きます。
this.HogeCommand = new DelegateCommand(this.HogeExecute, this.CanHogeExecute) .ObservesProperty(() => this.Title);