我有兴趣了解有关MVVM的更多信息。我看了一下MVVM演示应用程序。我理解它背后的许多主要概念。
当我开始使用该应用时,我想在应用启动时默认打开其中一个标签视图。但是我不确定如何做到这一点。
在应用程序中,我想我明白当单击控制面板按钮(例如,查看所有客户)时,commandrelay会创建一个新的AllCustomersViewModel,并且数据模板将视图应用于viewmodel,新的工作空间将创建到由于主窗口中的数据绑定,工作区集合和选项卡打开。
除了点击超链接之外,我不知道如何启动此过程。我知道我需要拨打new RelayCommand(param => this.ShowAllCustomers())
,但我不知道如何在没有任何用户互动的情况下调用此方法,或者如何从主窗口视图模型外部调用它,例如从应用程序的onstartup方法。
有人可以建议在启动应用程序时使用relaycommand的最佳方法吗?另外,如果我想要传递的方法在另一个类中,如何使用relay命令?
VMaleev正确地给了我一个调用命令的方法,但是提供的示例特定于命令集合。如果我有一个方法Public ICommand HelpPageCommand
根据ShowHelpPage所在的ShowHelpPage
方法创建一个新命令,该怎么办?
HelpViewModel workspace = new HelpViewModel();
this.Workspaces.Add(workspace);
this.SetActiveWorkspace(workspace);
那我怎么称呼这个命令呢? - 简单,如果方法是ICommand,那么只需method.execute(null)
答案 0 :(得分:3)
我想,你在谈论this文章。
要在没有用户交互的情况下调用RelayCommand,您应该写:
如果想从MainWindowViewModel调用(例如,在构造函数中):
_commands.FirstOrDefault(q => q.DisplayName == Strings.MainWindowViewModel_Command_ViewAllCustomers).Command.Execute(null);
如果想从App.xaml.cs调用(在应用程序启动时,代码是从示例中获取的,只添加了一行)或者您有权查看模型实例的其他地方:
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();
}
如果要传递的方法在另一个类中,有两种方法可以执行:
希望,这有帮助