and*_*eri 18 validation wpf xaml
我有几个带有自定义验证器的文本框:(
我不介意将"错误的"数据发送回对象(属性是字符串),如果出现错误,我只需要阻止按钮的功能,所以如果对于那种验证,绑定不是正确的地方请告诉我.我只是喜欢我可以使用的Validation.ErrorTemplate支持)
<ControlTemplate x:Key="validator" >
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Right" Foreground="Red" FontSize="12pt">!</TextBlock>
<Border BorderBrush="Red" BorderThickness="1.0">
<AdornedElementPlaceholder />
</Border>
</DockPanel>
</ControlTemplate>
<TextBox Height="23" Width="150" TextWrapping="Wrap"
Validation.ErrorTemplate="{StaticResource validator}">
<TextBox.Text>
<Binding Path="StringProperty" UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<local:NumbersOnly/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Run Code Online (Sandbox Code Playgroud)
如果出现任何验证错误,如何禁用特定按钮?
<Button Content="DO Work" Height="57" HorizontalAlignment="Left" Name="button1" VerticalAlignment="Top" Width="234" Click="button1_Click" />
Run Code Online (Sandbox Code Playgroud)
S.M*_*hra 48
您可以使用MultiDataTrigger财产Style.Triggers的Button.我们假设我们有一个TextBox名为"txtName"的名称.我们必须在验证错误上禁用按钮"btnSave" TextBox.
这是你可以做的:
<Button Content="Save"
Grid.Column="1"
Grid.Row="3"
HorizontalAlignment="Right"
Height="23"
Name="btnSave"
Width="75"
IsDefault="True"
Command="{Binding SaveProtocolCommand}"
Margin="3">
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="False"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=(Validation.HasError), ElementName=txtName}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="True"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Run Code Online (Sandbox Code Playgroud)
希望这会帮助你.
小智 5
CanExecuteMVVM中用于授权管理,但人们将其用于验证。最好的方法是在XAML中做到这一点。如果您有多个要验证的字段(这InverseAndBooleansToBooleanConverter是我对多个布尔值的实现),则需要一个转换器。这样做的方法如下:
XAML代码(很抱歉,如果确实显示XAML代码,因为即使尝试也可以显示它):
<Button Name="Button_Test" Content="Test">
<Button.IsEnabled>
<MultiBinding Converter="{StaticResource InverseAndBooleansToBooleanConverter}" Mode="TwoWay">
<Binding ElementName="TextBox_Field1" Path="(Validation.HasError)" />
<Binding ElementName="TextBox_Field2" Path="(Validation.HasError)" />
<Binding ElementName="TextBox_Field3" Path="(Validation.HasError)" />
</MultiBinding>
</Button.IsEnabled>
</Button>
Run Code Online (Sandbox Code Playgroud)
转换器
public class InverseAndBooleansToBooleanConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values.LongLength > 0)
{
foreach (var value in values)
{
if (value is bool && (bool)value)
{
return false;
}
}
}
return true;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24179 次 |
| 最近记录: |