C# 为什么这个代码不起作用?跑步后什么也没发生?我希望在我的视图中有验证错误
我认为这样的代码C# 为什么这个代码不起作用?跑步后什么也没发生?我希望在我的视图中有验证错误,c#,wpf,C#,Wpf,我认为这样的代码 <TextBox Text="{Binding MiejsceWykonaniaNadgodzin, UpdateSourceTrigger=PropertyChanged}" Name="MiejsceWykonaniaNadgodzinText" Margin="50 50 50 50"> <Validation.ErrorTemplate> <ControlTemplate>
<TextBox
Text="{Binding MiejsceWykonaniaNadgodzin, UpdateSourceTrigger=PropertyChanged}"
Name="MiejsceWykonaniaNadgodzinText" Margin="50 50 50 50">
<Validation.ErrorTemplate>
<ControlTemplate>
<StackPanel>
<!-- Placeholder for the TextBox itself -->
<AdornedElementPlaceholder x:Name="textBox"/>
<TextBlock Text="{Binding [0].ErrorContent}" Foreground="Red"/>
</StackPanel>
</ControlTemplate>
</Validation.ErrorTemplate>
</TextBox>
我在视图中的文本框中写入了数字,例如2222
,但没有显示错误
<TextBox Name="MiejsceWykonaniaNadgodzinText" Margin="50 50 50 50">
<TextBox.Text>
<Binding Path="MiejsceWykonaniaNadgodzin" UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<local:MiejsceWykonaniaNadgodzinTextRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
<Validation.ErrorTemplate>
<ControlTemplate>
<StackPanel>
<!-- Placeholder for the TextBox itself -->
<AdornedElementPlaceholder x:Name="textBox"/>
<TextBlock Text="{Binding [0].ErrorContent}" Foreground="Red"/>
</StackPanel>
</ControlTemplate>
</Validation.ErrorTemplate>
</TextBox>
别忘了修改
public string MiejsceWykonaniaNadgodzin
{
get => miejsceWykonaniaNadgodzin;
set
{
this.miejsceWykonaniaNadgodzin = value;//"aaa";
OnPropertyChanged(nameof(MiejsceWykonaniaNadgodzin));
}
}
尝试
OnPropertyChanged(nameof(MiejsceWykonaniaNadgodzin))代码>为什么会出现错误?MieJScewykonaniadGodzin是一个字符串,2222是一个有效字符串。您还在setter中将backing变量设置为固定字符串,而不是值,因此miejsceWykonaniaNadgodzin将始终设置为“aaa”。您是对的,Andy,观点正确。您能告诉我如何将OnPropertyChanged()与双变量一起使用吗?在看到验证错误后,我会看到它。非常感谢您的帮助。非常感谢,但我遇到了一个错误。无法分配值,应为ValidationRule。我补充说我的MyCustomConverter实现验证规则
你能给我看看你的MyCustomConverter实现吗
public class MiejsceWykonaniaNadgodzinTextRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
//example test
if(value.ToString() == "aaa")
return new ValidationResult(false, $"Error: value = aaa");
return ValidationResult.ValidResult;
}
}
public string MiejsceWykonaniaNadgodzin
{
get => miejsceWykonaniaNadgodzin;
set
{
this.miejsceWykonaniaNadgodzin = value;//"aaa";
OnPropertyChanged(nameof(MiejsceWykonaniaNadgodzin));
}
}