/ / WPF TextBox Червена граница, която все още се показва след успех на валидирането - wpf, validationrule

Червената граница на WPF TextBox, която все още се показва след валидирането, Rule успява - wpf, validationrule

Имам текстово поле с много прост ValidationRule:

<TextBox x:Name="textFirstName" Width="120">
<TextBox.Text>
<Binding
Path="CurrentSelectionData.Tables[cpeople].Rows[0][FirstName]"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:NonEmptyStringValidationRule ValidatesOnTargetUpdated="True"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>

public class NonEmptyStringValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if (value == null || string.IsNullOrWhiteSpace(value.ToString()))
return new ValidationResult(false, "Must provide a value.");

return ValidationResult.ValidResult;
}
}

Проблемът е, че червената граница за грешка при валидиране се показва при стартиране, въпреки че текстовото поле е обвързано с непразни данни.

Гледайки точка на прекъсване на правилото за валидиране, Iвижте, че се извиква веднъж за празен низ (преди свързването да се промени на валидни данни) и още веднъж след актуализиране на свързването на валидни данни. Разбира се, второто обаждане връща ValidResult, но червената граница остава.

Ръчно изчистване на текстовото поле и въвеждане на нов текст в него изчиства червената граница, но просто въвеждането на нов текст в нея, без първо да го изчистите, не го прави.

Единствената потенциална хитрост, която мога да видя, отчетене на други хора "въпроси, е, че този TextBox е в контрол на раздела. Въпреки това, проблемът ми е обратното на тези други хора (те" не получават червена граница въпреки неуспешно валидиране), нито пък се премества в друг раздел контрол по всяко време (което е и причината за другите проблеми).

Някакви идеи, които съм изчезнал тук?

Отговори:

1 за отговор № 1

Оказва се, че промяната на валидирани обвързани даннипо време на събитие Window "Loaded причината за проблема. В моя случай, проблемът беше решен чрез извършване на промяна на данните по време на Initialized или ContentRendered. да мига по време на зареждане на приложението.


0 за отговор № 2

Опитах се да репликирам проблема ви, но изглежда, че работи добре в тестовете ми, така че проблемът трябва да е с данните, които обвързвате, както казахте validationRule работи добре.

Таблицата ли се свързва с вас TwoWay?

Моят тест:

XAML:

<TextBox x:Name="textFirstName" Width="120" ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}">
<TextBox.Text>
<Binding ElementName="UI" Path="TextTest" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" >
<Binding.ValidationRules>
<local:NonEmptyStringValidationRule ValidatesOnTargetUpdated="True"  />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>

код:

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private string _textTest;
public string TextTest
{
get { return _textTest ; }
set { _textTest = value; }
}
}

public class NonEmptyStringValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
return (value is string && !string.IsNullOrEmpty(value.ToString()))
? new ValidationResult(true, null)
: new ValidationResult(false, "Invalid Text");
}
}