不希望错误消息在开始/选项卡打开时显示。
使用IDataErrorInfo(到VM)实现验证,定义一个ErrorTemplate(XAML),并能够在TextBox旁边获取错误消息。
VM:(extended IDataErrorInfo)
public string this[string propertyName]
{
get
{
string validationResult = null;
switch (propertyName)
{
case "ProjectManager":
validationResult = ValidateManagerName();
break;
}
return validationResult;
}
}
public string ValidateManagerName()
{
if (string.IsNullOrEmpty(this.ProjectManager))
{
return "Manager name is mandatory!";
}
else
return string.Empty;
}
XAML.cs
save_option_summ()
{
BindingExpression be3 = managername.GetBindingExpression(TextBox.TextProperty);
be3.UpdateSource();
}
<StackPanel.Resources>
<ControlTemplate x:Key="ErrorTemplate">
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Right" Foreground="Blue" FontSize="13" Text="{Binding ElementName=adorned,Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" >
</TextBlock>
<Border BorderBrush="Red" BorderThickness="2">
<AdornedElementPlaceholder x:Name="adorned"/>
</Border>
</DockPanel>
</ControlTemplate>
</StackPanel.Resources>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<Label Content="Project Manager" FontSize="14" Margin="100,0,0,0" Width="150" FontFamily="Calibri"></Label>
<TextBox Height="auto" Width="300" Background="White" Margin="100,0,0,0" Validation.ErrorTemplate = "{StaticResource ResourceKey=ErrorTemplate}" Name="managername" Text="{Binding ProjectManager,Mode=TwoWay,UpdateSourceTrigger=LostFocus,ValidatesOnDataErrors=True}" TextChanged="TextChanged" FontFamily="Calibri" FontSize="14"/>
</StackPanel>
答案 0 :(得分:0)
您应该修改TextBox样式,以显示属性出了什么问题。这是一个简单的示例,将错误显示为工具提示:
<TextBox>
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors).[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
答案 1 :(得分:0)
因此,还有shivam sood的答案(这有助于在工具提示中显示错误)。
在显示的代码(问题)中,
public string ValidateManagerName()
{
if (string.IsNullOrEmpty(this.ProjectManager))
{
return "string.Empty";
}
//Other conditions can be written like alphanumeric cherck
else
return string.Empty;
}
不要在null检查(第一个条件)中返回任何内容,这样文本框就不会一直显示错误消息。