我刚刚开始学习WPF,对于任何愚蠢的问题提前抱歉。如果所有输入都没有验证错误,我想启用一个按钮。这是我的示例输入窗口:
<StackPanel>
...rest of my page
<Label>Age:</Label>
<TextBox>
<TextBox.Text>
<Binding Path="Age" UpdateSourceTrigger="PropertyChanged"/>
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules
</Binding>
</TextBox.Text>
</TextBox>
<Label>Options:</Label>
<RadioButton>Option one</RadioButton>
<RadioButton>Option two</RadioButton>
<Button Name="btnOK" MinWidth="40" Command="c:CustomCommands.Enter">Ok</Button>
</StackPanel>
在我的后面代码中,我将Button的CanExecute方法作为:
private void EnterCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = isValid(sender as DependencyObject);
}
private bool IsValid(DependencyObject obj)
{
return !Validation.GetHasError(obj) && LogicalTreeHelper.GetChildren(obj).OfType<DependencyObject>().All(IsValid);
}
我在google上看到人们只在一个RadioButton中添加验证规则,就像Validation Rule for Radio buttons wpf一样。
我需要的是当取消选择所有RadioButton时,它应该添加一个Validation Error,这样就可以通过IsValid方法禁用Button。如果选择任何RadioButton,如果Age也是“ok”,则启用Button。
另外,我需要知道它在RadioButton部分的模型视图类中会是怎样的。
谢谢!
答案 0 :(得分:0)
根据Stígandr在本主题中的回答(Bind IsEnabled property to Boolean in WPF),您只需在viewModel中创建一个属性,并将Radiobutton IsEnabled / IsChecked属性绑定到此属性。
您可以在方法中设置该属性。
private bool IsValid(DependencyObject obj)
{
return !Validation.GetHasError(obj) && LogicalTreeHelper.GetChildren(obj).OfType<DependencyObject>().All(IsValid);
yourProperty = value;
}
然后它将更新您的用户界面。
在你的情况下,
在viewModel中创建一个绑定到yourProperty的依赖项属性。
private static readonly DependencyProperty IsFormValidProperty =
DependencyProperty.Register(
"IsFormValid",
typeof(bool),
typeof(YourControl),
new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnValidationChanged))
);
privatestaticvoid OnValidationChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
// here , if e.newValue is true then
//you can set button's IsEnabled property to true.
}