PrismとMVVMを使用してWPFアプリケーションを開発しています。すべてのDelegateCommandとDelegateCommandに対してRaiseCanExecuteChangedを呼び出す方法
アプリケーションの要件の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>
には影響を与えません。
私の質問はです。そのプロパティがタイプDelegateCommand<T>
であることを確認し、その特定の型にキャストしてRasieCanExecuteChangedを呼び出す方法はありますか?
ありがとう!ジェネリッククラスを非ジェネリックベースにキャストすることが可能であるかどうかはわかりませんでした。 –