【发布时间】:2019-09-23 14:01:24
【问题描述】:
我对属性进行了规则验证。我想要的是,当条件不满足时,应该禁用保存按钮。我该怎么做?这是它的外观: image。该按钮未被禁用。
这是我的代码
public string FieldName { get; set; }
public Regex regularExpression = new Regex("^[a-zA-Z]*$");
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
//var stringValue = value as string;
if (FieldName == "Age")
return AgeValidate(value);
if (FieldName == "Name")
return NameValidation(value);
return new ValidationResult(true, null);
}
private ValidationResult NameValidation(object value)
{
var onlyCharacters = regularExpression.IsMatch((string)value);
if (onlyCharacters)
return new ValidationResult(true, null);
else
return new ValidationResult(false, $"Only alfabetical charaters");
}
在 XAML 中:
<Label Grid.Row="0" Grid.Column="0" Margin="103,0,98,10" Content="Name : " VerticalContentAlignment="Center" HorizontalContentAlignment="Right" Grid.ColumnSpan="2"/>
<TextBox Grid.Row="0" Grid.Column="1" x:Name="txtCourtName" Margin="113,4,-55,6" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" Validation.ErrorTemplate="{StaticResource errorTemplate}" >
<TextBox.Text>
<Binding Path="CourtName" ValidatesOnDataErrors="true" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local11:AuthValidation FieldName="Name"></local11:AuthValidation>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
按钮:
<Button Content="Save" x:Name="btnSaveCourt" Command="{Binding SaveCourt}" Margin="2,10" Width="119" Background="#909090" Foreground="Black" BorderBrush="White" />
还有我的错误模板:
<ControlTemplate x:Key="errorTemplate">
<Border BorderBrush="OrangeRed" BorderThickness="2">
<Grid>
<AdornedElementPlaceholder>
<TextBlock Text="{Binding [0].ErrorContent}" Foreground="OrangeRed"
VerticalAlignment="Center" HorizontalAlignment="Right"
Margin="-220"
>
</TextBlock>
</AdornedElementPlaceholder>
</Grid>
</Border>
</ControlTemplate>
【问题讨论】:
-
当你想禁用
Button时,你应该实现SaveCourt命令的CanExecute方法来返回false,而不是使用ValidationRule。
标签: c# .net wpf validation mvvm