C# 当值无效时,如何允许仅按取消按钮?

C# 当值无效时,如何允许仅按取消按钮?,c#,wpf,devexpress,C#,Wpf,Devexpress,我有一个带有SpinEdit和两个按钮的简单对话框:OK_按钮和Cancel_按钮。我已经在SpinEdit中为该值设置了掩码,当该值无效时,对话框不允许我按下取消按钮。我已尝试将SpinEdit的属性更改为InvalidValueBehavior=“AllowLeaveEditor”,但我可以同时单击“确定”和“取消”按钮。是否有一种方法仅允许在值不正确时按cancel XAML: 但事件根本没有得到处理。我希望将属性InvalidValueBehavior保留为值“WaitForValidV

我有一个带有SpinEdit和两个按钮的简单对话框:OK_按钮和Cancel_按钮。我已经在SpinEdit中为该值设置了掩码,当该值无效时,对话框不允许我按下取消按钮。我已尝试将SpinEdit的属性更改为InvalidValueBehavior=“AllowLeaveEditor”,但我可以同时单击“确定”和“取消”按钮。是否有一种方法仅允许在值不正确时按cancel

XAML:


但事件根本没有得到处理。我希望将属性InvalidValueBehavior保留为值“WaitForValidValue”,但同时我希望允许按下取消按钮。

即使您不打算使用完整的MVVM路径,也应该从使用click events切换到支持CanExecute逻辑的ICommand实现(例如从MVVM Light)

当CanExecute为false时,使用命令将自动禁用任何绑定控件(例如按钮或菜单项)。然后,可以将用于控制命令的所有逻辑组合到一个位置,包括验证,该验证只允许在对象处于有效状态时单击“确定”

如果您只想使用标准WPF(非MVVM)路由,可以在窗口的构造函数中添加类似的内容

public MyView()
{
    ....


    Ok_Button.Command = 
        new RelayCommand(() => DialogResult = true, // just setting DialogResult is sufficient, no need to call Close()
                         // put the required validation logic here  
                         () => dxSpinEdit.Value > 0 && dxSpinEdit.Value < 10);

    Cancel_Button.Command = new RelayCommand(() => DialogResult = false);

    // replace this with the actual event from SpinEdit
    dxSpinEdit.ValueChanged += (s,e) => (OK_Button.Command as RelayCommand).RaiseCanExecuteChanged();
}
publicmyview()
{
....
确定按钮。命令=
new RelayCommand(()=>DialogResult=true,//只设置DialogResult就足够了,不需要调用Close()
//将所需的验证逻辑放在这里
()=>dxSpinEdit.Value>0&&dxSpinEdit.Value<10);
Cancel_Button.Command=newrelaycommand(()=>DialogResult=false);
//将其替换为SpinEdit中的实际事件
dxSpinEdit.ValueChanged+=(s,e)=>(确定按钮。命令作为RelayCommand)。RaiseCancecutChanged();
}
是的,我知道它看起来很丑