在文本框中输入验证

时间:2019-04-08 04:54:17

标签: c# wpf validation mvvm textbox

不希望错误消息在开始/选项卡打开时显示。

使用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>

2 个答案:

答案 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检查(第一个条件)中返回任何内容,这样文本框就不会一直显示错误消息。