c# - WPF 根据需要以编程方式设置字段

标签 c# wpf validation c#-4.0

我是 WPF 的新手,但已经花时间研究 WPF 验证,还没有看到条件验证的好方法。

为了大大简化情况,假设我有两个文本框和一个提交按钮。用户在第一个文本框中输入一个字符串。如果用户输入,例如“ABC”,那么第二个文本框应该是一个必填字段(我希望背景是浅蓝色,以表示这一点),并且提交按钮应该被禁用,直到该文本框是人口稠密。

如何做到这一点?有没有一种简单的方法可以在运行时添加/删除验证? 'DataAnnotations' (http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.aspx) 似乎是一个不错的起点,但我无法用 [Required] 属性标记字段,因为并不总是需要该字段。基本上,我需要类似 'Required if Field1 = 'ABC' 的东西

谢谢!

最佳答案

我会使用 MVVM 来处理它,这里是一个示例。 在类上实现 IDataError Info,这将实现两个属性 Error 和 this[string columnName] 你可以用你想要的绑定(bind)错误实现第二个属性

public class MainViewModel:ViewModelBase,IDataErrorInfo  
{

 public string Error
  {
  }
public string this[string columnName]

{
 get
  {
     string msg=nulll;
     switch(columnName)
        {
          case "MyProperty": //that will be your binding property
           //choose your validation logic
           if(MyProperty==0||MyProperty==null)
             msg="My Property is required";
            break;
         }
     return msg;
    }
}

还要在文本框的绑定(bind)中设置 ValidateOnErrors=True。这里的 ColumnName 是已更改且 ValidateOnErrors 设置为 true 的属性的名称。选中此处并设置条件并返回消息,然后将此样式放入资源时,您将在工具提示上看到错误。

<UserControl.Resources>
    <Style TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true" >
                <Setter Property="Foreground" Value="Red"/>
                <Setter Property="Background" Value="MistyRose"/>
                <Setter Property="BorderBrush" Value="Red"/>
                <Setter Property="BorderThickness" Value="1.0"/>
                <Setter Property="VerticalContentAlignment" Value="Center"/>
                <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

这是文本框的示例

<TextBox Text="{Binding UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, 
 Path=PropertyName,ValidatesOnDataErrors=True}" Name="textBox1">
  <Validation.ErrorTemplate>
        <ControlTemplate>
          </ControlTemplate>
   </Validation.ErrorTemplate>

 </TextBox>

关于c# - WPF 根据需要以编程方式设置字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7667862/

相关文章:

c# - Google ML-Engine Predict from C# 身份验证问题

c# - ShimDateTime 在 System.Fakes 中不可用

c# - Win 8.1 DPI - WPF - 如何查找独立监视器/显示器的 DPI

wpf - 如何使用 XAML 绑定(bind)到 GridView 的 ColumnCollection

javascript - 如何使用 formy-react 在 React 中禁用 HTML 验证?

validation - 使用 Flash 消息和自定义验证参数进行 Laravel 验证

c# - 当你拥有 Rich Models 时你会做什么?

c# - Azure SQL 数据库的暂时登录错误

wpf - 如何设置 WPF 文本框插入符号的样式。

java - 验证 java 中的模式