J'ai créé un WPF qui sert à obtenir un numéro de série d'un client. Dans le cadre du processus, j'essaie de le valider afin que la longueur de chaque segment soit exactement de 5 caractères et que tous les caractères soient des lettres ou des chiffres. J'ai suivi le plan donné here. Le problème est qu'il ne semble pas faire quoi que ce soit, et j'ai suivi les instructions pour le bouton soumettre aussi et il soumettra avec des données incorrectes, alors qu'il semble qu'il ne devrait pas valider si les valeurs ne sont pas ' t bien. Est-ce que cela a quelque chose à voir avec la liaison Path
? Si non, pourquoi mes champs ne seront-ils pas validés?La validation WPF ne fonctionnait pas
Le code pour la ValidationRule
ressemble à ceci:
namespace Syncagent.Installer
{
class LicenseValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if(!(value.ToString().Length == 5))
return new ValidationResult(false,"Incorrect number of characters.");
Regex rExp = new Regex("^[A-Z0-9]*$");
if (!rExp.IsMatch(value.ToString().ToUpper()))
{
return new ValidationResult(false,"A key may contain only numbers and letters.");
}
return new ValidationResult(true, null);
}
}
}
Voici le XAML:
<Window x:Name="wFusionKey" x:Class="SyncAgent.Installer.KeyForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SyncAgent.Installer"
Title="FusionKeyForm" Height="158" Width="338" ResizeMode="NoResize">
<Grid Margin="0,0,-6,1" HorizontalAlignment="Left" Width="334">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0*"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button x:Name="btnOkay" Content="Submit" HorizontalAlignment="Left" Margin="166,96,0,0" VerticalAlignment="Top" Width="75" Grid.Column="1" Height="22" IsDefault="True" Click="btnOkay_Click"/>
<Label x:Name="lblFusionLicenseKey" Content="Please enter your 25-digit Fusion License Key here." HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Grid.Column="1" Height="26" Width="278"/>
<TextBox x:Name="txtFusion1" HorizontalAlignment="Left" Height="23" Margin="10,57,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="51" Grid.Column="1" MaxLength="5" MaxWidth="Infinity">
<TextBox.Text>
<Binding Path="/" Mode="default" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:LicenseValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<Button x:Name="btnCancel" Grid.ColumnSpan="2" Content="Cancel" HorizontalAlignment="Left" Margin="246,96,0,0" VerticalAlignment="Top" Width="75" IsCancel="True"/>
<TextBox x:Name="txtFusion2" Grid.ColumnSpan="2" HorizontalAlignment="Left" Height="23" Margin="76,57,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="50" MaxLength="5">
<TextBox.Text>
<Binding Path="Left" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:LicenseValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<TextBox x:Name="txtFusion3" Grid.ColumnSpan="2" HorizontalAlignment="Left" Height="23" Margin="141,57,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="50" MaxLength="5">
<TextBox.Text>
<Binding Path="Left" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:LicenseValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<TextBox x:Name="txtFusion4" Grid.ColumnSpan="2" HorizontalAlignment="Left" Height="23" Margin="206,57,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="50" MaxLength="5" RenderTransformOrigin="1.491,0.522">
<TextBox.Text>
<Binding Path="Left" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:LicenseValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<TextBox x:Name="txtFusion5" Grid.ColumnSpan="2" HorizontalAlignment="Left" Height="23" Margin="271,57,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="50" MaxLength="5">
<TextBox.Text>
<Binding Path="Left" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:LicenseValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Voyez-vous appeler LicenseValidationRule et lancer une fausse validation? Le chemin de liaison de/est impair. – Paparazzi
Non, je ne pense pas que cela fasse quoi que ce soit. J'ai fait un chemin de liaison de '/' pour tester si cela changerait les choses. J'ai l'impression que le chemin de liaison est mauvais, mais je ne sais pas ce que je suis censé faire. – ijb109
Vous devez définir le datacontext et le chemin. Réglez simplement le datacontext à ceci et ayez la propriété publique pour txtFusion1. Le chemin est le nom de cette propriété publique. – Paparazzi