Проверка ввода в TextBox - PullRequest
       2

Проверка ввода в TextBox

0 голосов
/ 08 апреля 2019

Не хочу, чтобы сообщение об ошибке отображалось при запуске / при открытии вкладки.

Проверка выполняется с использованием IDataErrorInfo (для виртуальной машины), определяется 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 голосов
/ 15 апреля 2019

Итак, вместе с ответом Шивама Суда (который помогает показать ошибку в подсказке).

В показанном коде (вопрос),

public string ValidateManagerName()
{
   if (string.IsNullOrEmpty(this.ProjectManager))
        {
            return "string.Empty";
        }
        //Other conditions can be written like alphanumeric cherck
        else
            return string.Empty;
    }

Не возвращать ничего при проверке нуля(первое условие), чтобы текстовое поле не всегда отображало сообщение об ошибке.

0 голосов
/ 08 апреля 2019

Вам следует изменить стиль 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...