Я создал WPF, который служит для получения серийного номера от клиента. В рамках процесса я пытаюсь проверить его так, чтобы длина каждого сегмента составляла ровно 5 символов, а все символы - буквы или цифры. Я следил за контуром here.WPF Validation не работает
Проблема в том, что она ничего не делает, и я также выполнил инструкции для кнопки отправки, и она будет отправляться с неправильными данными, тогда как кажется, что она не должна проверять, соответствуют ли значения aren ' t правильно. Имеет ли это какое-либо отношение к привязке Path
? Если нет, почему мои поля не проверяются?
Код для ValidationRule
выглядит следующим образом:
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);
}
}
}
Вот 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>
Вы видите, что он вызывает LicenseValidationRule и выдает ложную проверку? Путь привязки/нечетен. – Paparazzi
Нет, я не думаю, что это вообще что-то делает. Я выполнил путь привязки '/', чтобы проверить, не изменит ли это. Я чувствую, что путь привязки неверен, но я не знаю, что я должен устанавливать. – ijb109
Вам необходимо установить datacontext и путь. Просто установите для этого datacontext и у вас есть общедоступное свойство txtFusion1. Путь - это имя этого публичного имущества. – Paparazzi