WPF:如何调用类似于iccommand的方法

本文关键字:类似于 iccommand 方法 调用 何调用 WPF | 更新日期: 2023-09-27 18:13:51

这似乎是一个愚蠢的问题,但我在学习曲线所以问这个问题。事实上,我正试图为之前未解决的问题找到一个替代方案:WPF:如何使Dispatcher.Invoke()调用同步?

在MVVM应用程序中,我们为按钮的命令绑定定义了一个命令,它可以调用另一个方法,加载另一个ViewModel或执行一些指令等。

更新代码:这是我的iccommand,绑定到按钮,它将加载ViewModel来显示EndView:

  public ICommand EndCommand => new RelayCommand(p =>
    {
        WixBootstrapperData.CurrentViewModel = new EndViewModel(WixBootstrapperData);
    });

但是当我试图从另一个方法加载相同的ViewModel时,它做了加载,但从未显示EndView,并跳到其他指令,直到方法结束,这实际上是应用程序本身的结束。下面是代码片段:

BootstrapperApplication。ApplyComplete += (sender, e) =>{

       WixBootstrapperData.CurrentDispatcher.Invoke((Action)(() =>
       {
           if (e.Restart == ApplyRestart.RestartRequired)
           {
               //This would be loaded, but never showed the related View and skipped to next instruction
               WixBootstrapperData.CurrentViewModel = new EndViewModel(WixBootstrapperData); 
           }
           //However, This would be loaded and related View would also be displayed
           WixBootstrapperData.CurrentViewModel = new FinishViewModel(WixBootstrapperData);
       }
       ));
   }

我们可以从另一个方法调用相同的iccommand来获得相同的行为吗?或者其他方式?

定义一个事件并订阅它会在方法执行中给出相同的行为吗?

WPF:如何调用类似于iccommand的方法

您可以在另一个方法中执行命令。

首先,建议检查命令是否可以执行,使用.CanExecute() -返回一个bool

如果您确实可以执行该命令,那么您可以在该命令上调用.Execute()


例子:

假设您的ICommandRelayCommand,并称为MyCommand

假设你想从SomeOtherMethod():

调用它
public RelayCommand MyCommand { get; set; }
public void SomeOtherMethod()
{
    if (MyCommand.CanExecute())
    {
        MyCommand.Execute();
    }
}

如果您使用的是DelegateCommand,也可以使用相同的方法-我使用Prism使用这些方法。

希望这对你有帮助!:)