我在WPF项目中使用MVVM。现在我想在有人按下按钮时显示子窗口。为了实现这一点,我将调用Show()方法。为了保持我的应用程序清晰,我现在想要的是将按钮绑定到子窗口的Show()函数。
由于按钮单击(菜单单击,无论如何)并不总是允许,我编写了一个自定义命令,用于评估命令是否可以执行。但是,我没有找到如何以干净的方式调用该控件的功能的线索。这是做一些经典风格(前端代码)的重点吗?
编辑(包括代码)
XAML:
<MenuItem Foreground="White" Header="File">
<MenuItem Header="Login" Background="#FF444444" Command="{Binding Dialog.ApplicationLoginCommand}" />
<MenuItem Header="Logout" Background="#FF444444" Command="{Binding Dialog.ApplicationLogoutCommand}" />
<MenuItem Header="Exit" Background="#FF444444" Command="{Binding Dialog.ApplicationShutdownCommand}" />
</MenuItem>
C#:
public class ApplicationDisplayLoginCommand : ICustomCommand {
private MyViewModel _ViewModel = null;
public ApplicationDisplayLoginCommand( MoneyManagementViewModel vm ) {
_ViewModel = vm;
}
#region ICustomCommand Members
public event CustomCommandExecutedDelegate CustomCommandExecuted;
#endregion
#region ICommand Members
public bool CanExecute( object parameter ) {
return ! _ViewModel.IsLoggedIn;
}
public event EventHandler CanExecuteChanged {
add {
CommandManager.RequerySuggested += value;
}
remove {
CommandManager.RequerySuggested -= value;
}
}
public void Execute( object parameter ) {
if (null != CustomCommandExecuted) {
CustomCommandExecuted ();
}
_ViewModel.Login ();
}
}
ICustomCommand继承自ICommand,只是为了添加事件,因为一个Command特定于不同的前端,需要命令行为不同。
HTH
-sa
答案 0 :(得分:1)
您无法绑定到方法,只能绑定到属性。如果您需要从ViewModel打开一个新窗口,请查看Josh Smith的this article。它显示了如何使用服务定位器显示消息框。您可以轻松调整代码以显示任何窗口