打开儿童窗口标准
免责声明:我仍然在学习MVVM和WPF,所以这可能只是一个ICommand和RelayCommand的问题。 我没有使用MVVM框架或类似的东西,只是VS2010。
目前我有一个带登录按钮的MainWindow,可以打开一个子窗口。 我已经能够通过使用以下任一方式来实现这一点:
是否有一个“适当”或“社区标准”的方式来组织代码? 无论采用哪种方式,我是不是把它设置得不合适?
方法1: OpenLoginPrompt ICommand File:
namespace SafetyTraining.Commands
{
public class OpenLoginPrompt : ICommand
{
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
LoginPrompt login = new LoginPrompt();
login.ShowDialog();
}
}
}
方式2: RelayCommand文件
namespace SafetyTraining.Commands
{
class RelayCommand : ICommand
{
private Action<object> _action;
public RelayCommand(Action<object> action)
{
_action = action;
}
#region ICommand Members
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
if (parameter != null)
{
_action(parameter);
}
}
#endregion
}
}
MainWindowViewModel
namespace SafetyTraining.ViewModels
{
class MainWindowVM
{
private ICommand m_ButtonCommand;
public ICommand ButtonCommand
{
get
{
return m_ButtonCommand;
}
set
{
m_ButtonCommand = value;
}
}
public MainWindowVM()
{
ButtonCommand = new RelayCommand(new Action<object>(LoginOpen));
}
public void LoginOpen(object obj)
{
LoginPrompt login = new LoginPrompt();
login.ShowDialog();
}
}
}
附加问题:命令是否应该放在单独的CS文件中(我现在正在做什么)或者是模型/视图模型的一部分,还是仅仅是一个偏好问题?
您应该使用第二个ICommand实现(RelayCommand),因为它是您可以用于任何目的的通用命令,即可以使用此命令实例绑定到任何其他按钮/菜单命令。 第一个是相当严格的,只有一个目的。
理想情况下,每个新班级都应该放在一个新文件中。 我个人在ViewModel层创建命令文件夹并将命令放在那里。
链接地址: http://www.djcxy.com/p/56147.html