使用按钮上的数据注释进行屏幕验证在WPF中单击

时间:2016-08-11 12:14:21

标签: c# wpf xaml data-annotations idataerrorinfo

我的WPF表单包含单个属性“ PersonName ”。我希望在 NULL OR EMPTY 上引发错误。我从数据注释获得了一个解决方案,我参考了教程http://www.c-sharpcorner.com/uploadfile/20c06b/screen-validation-with-data-annotations-in-wpf/

我的XAML

<TextBox Text="{Binding PersonName, UpdateSourceTrigger=PropertyChanged,
 NotifyOnValidationError=True, ValidatesOnDataErrors=True}" />

<Button Content="Save" IsDefault="True" Command="{Binding SaveCommand}"
 IsEnabled="{Binding }" Width="150" Height="40"/>

我只能在 onPropertyChange 事件中看到错误。如果我在没有触摸TextBox的情况下直接按下按钮,我就无法看到错误。如何在 Button 点击。

上触发相同的功能

我的要求是PersonName不应该是 NULL EMPTY ,如果该属性是 NULL EMPTY ,然后我需要根据 IDataErrorInfo 而不是 Property.Length

首先,我们不会应用任何验证。一旦错误的数据输入或没有值击中Button,那么我需要验证。

2 个答案:

答案 0 :(得分:1)

使用IDataErrorInfo接口并按照以下方式添加它,如

public class ABC : IDataErrorInfo
{
    private string _PersonName;
    public string PersonName
    {
        get { return _PersonName; }
        set
        {
            _PersonName = value;
            OnPropertyChanged("PersonName");
        }
    }

    public string Error
    {
        get { return string.Empty; }
    }

    public string this[string columnName]
    {
        get
        {
            if ("PersonName" == columnName)
            {
                if (String.IsNullOrEmpty(PersonName))
                {
                    return "Your Error Message";
                }
            }
        }
    }
}

并将xaml更改为

<TextBox Text="{Binding PersonName, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True, ValidatesOnExceptions=True, ValidatesOnNotifyDataErrors=True}" />

答案 1 :(得分:0)

您可以在示例here中向ValidationRule申请TextBox 然后在Button

上设置触发器
<Button Content="Save" IsDefault="True" Command="{Binding SaveCommand} Width="150" Height="40">
    <Button.Style>
        <Style TargetType="Button">
          <Setter Property="IsEnabled" Value="False"/>
          <Style.Triggers>
            <MultiDataTrigger>
              <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding Path=(Validation.HasError), ElementName=PersonName}" Value="False"/>
              </MultiDataTrigger.Conditions>
              <Setter Property="IsEnabled" Value="True"/>
            </MultiDataTrigger>
            </Style.Triggers>
          </Style>
    </Button.Style>
</Button>