绑定到该按钮的命令被触发两次
问题描述:
我的WPF应用程序不时的用户能够触发两次绑定到按钮的命令。绑定到该按钮的命令被触发两次
XAML代码:
<Button x:Name="btnAccept"
Style="{StaticResource FlatButtonLarge}"
Height="42"
Command="{Binding Path=SubmitCmd}"
Content="Submit" />
我有同样键绑定
<Window.InputBindings>
<KeyBinding Key="F9" Command="{Binding SubmitCmd}" />
</Window.InputBindings>
我无法重现错误,但基于中我总结出命令被解雇了两次数据库的变化一次又一次。它真的是可行的吗?我怎样才能防止这种现象。 SubmitCmd将新记录添加到数据库并关闭表单。
这里是后面的代码:
vm.SubmitCmd = new RelayCommand(pars => DoSubmit(), pars => vm.CmdSubmitCanExecute, "Submit");
private void DoSubmit()
{
try
{
if (!vm.LaunchAllowed)
{
this.Close();
}
else
{
vm.LaunchAllowed = false;
bool isOk = DBService.SaveToDB(vm.Dto);
if (isOk)
{
DialogResult = true;
this.Close();
}
else
{
ShowError(this, result);
vm.LaunchAllowed = true;
}
}
}
catch (Exception ex)
{
ShowError(this, ex.Message);
vm.LaunchAllowed = true;
}
}
和视图模型代码:我觉得我看到这个太
public ICommand SubmitCmd{ get; set; }
public bool CmdSubmitCanExecute
{
get
{
return LaunchAllowed;
}
}
答
,但是 - 你 - 我无法重现它。这也是我的结论。
为了解决这个问题,我在命令运行后立即禁用了按钮。所以假设你使用mvvm,给它添加一个属性(不要忘记引发属性改变的事件)并绑定你的按钮的IsEnabled属性
你可以显示'SubmitCmd'的代码吗? – Valentin