我们正在使用MVVM架构创建一个WPF应用程序,该架构使用WCF服务来验证用户 我们设计了一个登录屏幕,并使用ICommand属性登录按钮。
问题是3次点击后登录发生了,我无法弄清楚原因。应用程序中的所有其他按钮在第一次单击时工作正常。另一件事是如果用户名或密码输入错误,则在两次点击后抛出登录失败的方法
这是Xaml
< Button x:Name="btnLogin"
Width="120"
Height="25"
Margin="0,0,0,0"
Command="{Binding Validate}"
Content="Login"
FontSize="14"
ToolTipService.ToolTip="Login" />
这是我们绑定到命令的属性
public ICommand Validate
{
get { return new LoginCommands(ValidateUser); }
}
这是实现ICommand Interface
的类class LoginCommands:ICommand
{
readonly Action<object> _execute;
readonly Predicate<object> _canExecute;
public LoginCommands(Action<object> execute)
: this(execute, null)
{
}
public LoginCommands(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
[DebuggerStepThrough]
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute(parameter);
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
_execute(parameter);
}
}
这是ValidateUser方法
private void ServiceValidUser()
{
if (SelectedLoginType.LoginTypeValue == 1)
{
LoginDetails.EncryptPW = LoginDetails.EncryptWindow(Password);
_model.ValidateUser(LoginName, LoginDetails.EncryptWindow(Password),
byte.Parse(SelectedUserType.EmpTypeValue.ToString()),
byte.Parse(SelectedLoginType.LoginTypeValue.ToString()),
(s, e) => ValidUser = e.Result.ValidateUserResult.ToString());
}
else
{
LoginDetails.EncryptPW = LoginDetails.Encrypt(Password);
_model.ValidateUser(LoginName, LoginDetails.Encrypt(Password),
byte.Parse(SelectedUserType.EmpTypeValue.ToString()),
byte.Parse(SelectedLoginType.LoginTypeValue.ToString()),
(s, e) => ValidUser = e.Result.ValidateUserResult.ToString());
}
}
private void CheckUser()
{
if (ValidUser == "0" || ValidUser == "2")
{
_model.GetLoginDetails(LoginName, LoginDetails.EncryptPW,
byte.Parse(SelectedUserType.EmpTypeValue.ToString()),
byte.Parse(SelectedLoginType.LoginTypeValue.ToString()),
(s, e) => LoginResult = e.Result.GetLoginInfoResult);
ErrorMessage = "";
}
else if (ValidUser == "1")
{
ErrorMessage = "Opps.! Invalid Password..!";
}
else if(ValidUser!="3")
{
ErrorMessage = "User Not Found..!";
}
if(LoginResult!=null && ValidUser=="0")
{
LoginDetails.LoginInfo = LoginResult.FirstOrDefault();
LoginDetails.UserName = LoginName;
LoginDetails.UserType = byte.Parse(SelectedUserType.EmpTypeValue.ToString());
LoginDetails.LoginType= byte.Parse(SelectedLoginType.LoginTypeValue.ToString());
var window = Utilities.GetWindowRef("LoginScreen");
window.Close();
}
}
请询问您是否需要更多信息。