gpt4 book ai didi

c# - 我如何在启动时使用中继命令,如果我想传递的方法在另一个类中,我该怎么做

转载 作者:行者123 更新时间:2023-11-30 21:55:24 25 4
gpt4 key购买 nike

我有兴趣了解有关 MVVM 的更多信息。我看过 MVVM 演示应用程序。我理解它背后的许多主要概念。

当我开始使用该应用程序时,我想在应用程序启动时默认打开其中一个选项卡 View 。但是我不确定该怎么做。

在应用程序中,我想我明白当单击控制面板按钮(例如查看所有客户)时,commandrelay 创建一个新的 AllCustomersViewModel 并且数据模板将 View 应用于 View 模型,新的工作区被创建到由于主窗口中的数据绑定(bind),工作区集合和选项卡打开。

除了单击超链接外,我不知道如何启动此过程。我知道我需要调用 new RelayCommand(param => this.ShowAllCustomers()) 但我不明白如何在没有任何用户交互的情况下调用它,或者如何从外部调用它主窗口 View 模型,例如来自应用的 onstartup 方法。

有人可以建议在应用程序启动时使用中继命令的最佳方法吗?另外,如果我要传递的方法在另一个类中,我该如何使用中继命令?


VMaleev 已正确地为我提供了调用该命令的方法,但是所提供的示例是特定于一组命令的。如果我有一个方法 Public ICommand HelpPageCommand 会根据 ShowHelpPage 所在的 ShowHelpPage 方法创建一个新命令怎么办?

HelpViewModel workspace = new HelpViewModel();
this.Workspaces.Add(workspace);
this.SetActiveWorkspace(workspace);

那我怎么调用这个命令呢?- 简单,如果方法是 ICommand,则只需 method.execute(null)

最佳答案

我想,你说的是 this文章。

要在没有用户交互的情况下调用 RelayCommand,您只需编写:

  1. 如果想从 MainWindowViewModel 调用(例如,在构造函数中):

    _commands.FirstOrDefault(q => q.DisplayName == Strings.MainWindowViewModel_Command_ViewAllCustomers).Command.Execute(null);
  2. 如果想从 App.xaml.cs(在应用程序启动时,代码取自示例,只添加一行)或您有权访问 View 模型实例的其他地方调用:

    protected override void OnStartup(StartupEventArgs e)
    {
    base.OnStartup(e);

    MainWindow window = new MainWindow();

    // Create the ViewModel to which
    // the main window binds.
    string path = "Data/customers.xml";
    var viewModel = new MainWindowViewModel(path);

    // When the ViewModel asks to be closed,
    // close the window.
    EventHandler handler = null;
    handler = delegate
    {
    viewModel.RequestClose -= handler;
    window.Close();
    };
    viewModel.RequestClose += handler;

    // Allow all controls in the window to
    // bind to the ViewModel by setting the
    // DataContext, which propagates down
    // the element tree.
    window.DataContext = viewModel;

    // the following line is added
    viewModel.Commands.FirstOrDefault(q => q.DisplayName == Strings.MainWindowViewModel_Command_ViewAllCustomers).Command.Execute(null);

    window.Show();
    }

如果你要传递的方法在另一个类中,有两种方法:

  • pub/sub 机制(通过使用 c# 事件)
  • 可以从 View 模型的每个实例访问您的 View 模型的所有实例。在这种情况下,您可以将 View 模型的任何实例的方法作为 RelayCommand 的参数传递

希望对你有帮助

关于c# - 我如何在启动时使用中继命令,如果我想传递的方法在另一个类中,我该怎么做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32345966/

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