私はmvvm(もちろんmvvlight)のnewbeeです。私は3つのモデルビューを持っています(MainWindowにはコンテナがあり、もう1つのモデルビューにはLoginとMenu)。 LoginModelViewでは、ユーザーログインが成功すると、MainWindowコンテナのページを変更するMenuViewModel(Messenger.Defaultとともに)を呼び出します。それまではすべてが問題なく、次にMessage.Default.Sendを呼び出して、LoginModelViewから正しく受信されたMenuModelViewにオブジェクトを送信し、関連付けられたオブジェクトを捕捉し、RelayCommandを定義するメソッド(ConfiguraMenu)を実行します。メソッドは例外なしで実行されます)、問題はRelayCommandがLoginViewModelに戻って再びログインするまで動作していないことです。私はCommandManager.InvalidateRequerySuggested()を試して、どちらも動作していません。RelayCommandが実行/実行変更をリフレッシュしていません
これはLoginViewModelのコードです:
//This method is called when the user press the login button. No problem with this
public void ActionVerificaUsuario()
{
Miusuario = db.getUsuario(Txtusuario, Txtpassword);
if (Miusuario.esUsuario())
{
Messenger.Default.Send(new MoveToViewMessage(Page.MenuView));
Messenger.Default.Send((UsuarioModel)Miusuario);
}
}
このコードはMenuViewModelのためである:
public RelayCommand AbreExeClaseCommand { get; private set; }
public MenuViewModel()
{
Messenger.Default.Register<UsuarioModel>(this, usuario_recibido => {Miusuario = usuario_recibido;ConfiguraMenu(); });
}
private void ConfiguraMenu() {
Mimenu = new MenuModel(Miusuario);
AbreExeClaseCommand = new RelayCommand(() => { Messenger.Default.Send(new MoveToViewMessage(Page.NeverReachedView)); },() => Mimenu.Sw_reportes);
CommandManager.InvalidateRequerySuggested();
AbreExeClaseCommand.RaiseCanExecuteChanged();
}
私は真でCanExecuteをハードコーディングしようとしましたが、実行はバックまで作業をせずに残っています再度ログインしてください。
あなたが私を助けてくれることを祈っています。
Galasoft.MvvmLight.Command
Galasoft.MvvmLight.CommandWpf
はあなたのWPFアプリケーションで正しい名前空間Galasoft.MvvmLight.CommandWpf
を使用していることを、確認してください: