gpt4 book ai didi

c# - RelayCommand不刷新执行/无法执行更改

转载 作者:行者123 更新时间:2023-12-03 10:26:28 25 4
gpt4 key购买 nike

我是mvvm中的newbee(当然是mvvlight)。我有3个modelviews(一个具有容器的MainWindow和另外2个modelviews(登录和菜单))。在LoginModelView中,当用户成功登录时,这将调用MenuViewModel(带有Messenger.Default)来更改MainWindow容器中的页面。在此之前一切都很好,然后我调用Message.Default.Send将一个对象从LoginModelView发送到MenuModelView,该对象已被正确监听,捕获关联的对象并执行定义了RelayCommand的关联方法(ConfiguraMenu)(逐行检查方法被执行,没有任何异常),但问题是直到我回到LoginViewModel并再次登录,此RelayCommand才起作用。我尝试使用CommandManager.InvalidateRequerySuggested(),但也不起作用。

这是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();
}

我尝试使用true对CanExecute进行硬编码,但是Execute仍然无法工作,直到返回并再次登录。

希望您能为我提供帮助(我几天来都挠头,没有结果)。

最佳答案

MvvmLight在两个不同的 namespace 中提供了两个不同的RelayCommand类:

  • Galasoft.MvvmLight.Command
  • Galasoft.MvvmLight.CommandWpf

  • 确保在WPF应用程序中使用了正确的命名空间 Galasoft.MvvmLight.CommandWpf

    MVVMLight中存在一个错误,导致 CanExecute()行为不正常。他们使用MVVMLight版本V5.0.2中的新 .CommandWpf命名空间修复了该问题。

    您也可以查看 this GalaSoft blog postthe change log以获取更多信息。

    关于c# - RelayCommand不刷新执行/无法执行更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41939411/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com