如果CheckBox是Checked WPF,则禁用ValidatesOnDataErrors

时间:2013-05-29 13:32:22

标签: c# wpf validation

如果选中某个复选框,我试图在TextBox上禁用ValidatesOnDataErrors。 我已经尝试在文本框上放置一个触发器来启用或禁用基于复选框的验证似乎触发器被命中但不禁用验证。我在 .cs 代码中使用 IDataErrorInfo 进行验证。这是我尝试的代码,这一直很头疼所以希望你能帮忙。

的.xaml

<TextBox Name="txtFoundERTReading" Height="23" Canvas.Left="125" TextWrapping="Wrap" Canvas.Top="136" Width="120">
    <TextBox.Style>                                
        <Style TargetType="{x:Type TextBox}">                                    
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=cbFoundERTReading, Path=IsChecked}" Value="False">
                    <Setter Property="Text" Value="{Binding Found.ERTReading, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=cbFoundERTReading, Path=IsChecked}" Value="True">
                    <Setter Property="TextBox.IsEnabled" Value="False" />
                    <Setter Property="Text" Value="{Binding Found.ERTReading, Mode=TwoWay, ValidatesOnDataErrors=False, UpdateSourceTrigger=PropertyChanged}" />                                            
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

2 个答案:

答案 0 :(得分:2)

不是在运行时更改ValidatesOnDataErrors属性,最好的方法是在viewmodel中有一个布尔属性,并且只有在为true时才进行验证。 boolean属性可以绑定到Checkbox的IsChecked属性。

    public string Name
    {
        get { return name; }
        set { name = value; RaisePropertyChanged("Name"); }
    }

    public string this[string columnName]
    {
        get
        {
            if (CanValidate)
            {
                if (columnName == "Name")
                {
                    if (!ValidateName())
                    {
                        return "Error";
                    }
                }
            }

            return "";
        }
    }

    private bool canValidate;

    public bool CanValidate
    {
        get { return canValidate; }
        set { canValidate = value; RaisePropertyChanged("CanValidate"); RaisePropertyChanged("Name");}
    }

    private bool ValidateName()
    {
        if (String.IsNullOrEmpty(Name))
        {
            return false;
        }
        return true;
    }

XAML如下所示,

    <StackPanel>
        <TextBox Margin="5" Text="{Binding Name, Mode=TwoWay, ValidatesOnDataErrors=True, NotifyOnValidationError=True, UpdateSourceTrigger=PropertyChanged}"/>
        <CheckBox Margin="5" Content="Can validate" IsChecked="{Binding CanValidate, Mode=TwoWay}"/>
    </StackPanel>

答案 1 :(得分:0)

使用此,

Validation.ErrorTemplate="{x:Null}"