20

私はMetroスタイルのアプリケーションを使い始めており(Metroと呼ぶことになっていないことはわかっていますが、何と呼ばれるべきか思い出せません...)、DelegateCommandMVVMで使用するクラスを実装しています。WPFでは、ICommand.CanExecuteChangedイベントは通常、次のように実装されます。

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

しかし、CommandManagerクラスはWinRTに存在しません...代わりに何か他のものがありますか?それとも、このイベントを自分で明示的にトリガーする必要がありますか?

4

2 に答える 2

14

WinRTでは、CanExecuteChangedを手動で更新/発生させる必要があります。これをグローバルに実行するCommandManagerはありません。これは首の痛み、またはCanExecuteが常に呼び出されていないため、パフォーマンスが大幅に向上していると見なすことができます。これは、以前は必要がなかった場所で、カスケードプロパティの変更について考える必要があることを意味します。しかし、これはそれがどのようであるかです。マニュアル。

public void RaiseCanExecuteChanged()
{
    if (CanExecuteChanged != null)
        CanExecuteChanged(this, EventArgs.Empty);
}
于 2012-09-25T15:51:53.643 に答える
1

WPFでは、ICommand.CanExecuteChanged説明したように実装する必要があります。ただし、Silverlightの場合はそうではありません。この関連する質問を参照してください:

WPFCommandParameterバインディングが更新されない

私の推測では、SilverlightのようにWinRTではCommandManager必要ありません。

ここで関連する議論を参照してください:

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/477cdd19-ee88-4746-97fe-59b8dbd44e0a/

于 2012-08-20T11:25:33.857 に答える