スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: スポンサー広告

Commandの実装を変える必要が出た。

MVVMに必須なCommandクラスを作る。で、CanExecuteChangedイベント系のところを以下のように実装した。

/// <summary>実行可否変更イベント</summary>
public event System.EventHandler CanExecuteChanged {
add {CommandManager.RequerySuggested += value;}
remove {CommandManager.RequerySuggested -= value;}
}

/// <summary>
/// コマンドの実行可否状態が変更された事を知らせるイベントを発生させます。
/// </summary>
public void RaiseCanExecuteChanged() {
CommandManager.InvalidateRequerySuggested();
return;
}
この実装、WPF4.5では上手く動作しない現象が発生した。WPF4.5とWPF4で、コマンド系のCanExecute周辺の実装が変更されたらしい。
WPF: ICommand CanExecuteChanged behaviour change in .NET 4.5
どうも、CanExecuteChangedイベントが発生した時、ハンドラ側に渡す第1引数(sender)が、ICommand以外だったり、nullだったりすると、更新してくれなくなったらしい。
そして、上記実装がそれに当たる感じ。ただ、動作したりしなかったりするんだよな。要するに、.NET4.5上では、動作が不安定になってしまった。
↓調査、参考サイト
WPF – コマンドのCanExecute強制自動再評価について
CommandManager Class
↑から引用。

Provides command related utility methods that register CommandBinding and InputBinding objects for class owners and commands, add and remove command event handlers, and provides services for querying the status of a command.

説明分によれば、CommandBindingやInputBindingのためのクラスであり、ICommand実装のCommandの為とは書いていない。WPF4.5上で動作を考えるなら、上の実装を修正する必要がありそうだ…。
安易な実装の方に飛びつくべきではなかったなOrz。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4.5 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。