Prism と MVVM を使用して WPF アプリケーションを開発しています。
アプリケーションの要件の 1 つは、別のユーザーとして (別の権限で) ログインできることです。
現在、ほとんどの権限は、特定のビューの表示を許可または禁止する単純なものです。それらのすべては、として、DelegateCommand
またはいつかとして実装されますDelegateCommand<T>
ユーザーが特定のビューを表示する権限を持っている場合、これらのコマンドの CanExecute は true を返します。また、ユーザー情報と権限を保持するシングルトン Sessionmanager があります。
ユーザーがログインすると、EventAggregator を使用してイベントを発生させます。すべての ViewModel の基本クラスで、そのイベントをサブスクライブし、DelegateCommand タイプの VM のすべてのパブリック プロパティを介してリフレクション ループを使用し、そのコマンドに対して RaiseCanExecuteChanged を呼び出します。
Type myType = this.GetType();
IList<PropertyInfo> props = new List<PropertyInfo>(myType.GetProperties());
foreach (PropertyInfo prop in props)
{
if (prop.PropertyType == typeof(DelegateCommand))
{
var cmd = (DelegateCommand)prop.GetValue(this, null);
cmd.RasieCanExecuteChanged();
}
}
これはすべての非ジェネリック DelegateCommand プロパティでうまく機能しますが、もちろん影響しませんDelegateCommand<T>
。
私の質問は、RasieCanExecuteChanged を呼び出すことができるように、そのプロパティのタイプを特定し、その特定のタイプにキャストする方法です。DelegateCommand<T>