簡體   English   中英

如果CheckBox是Checked WPF,則禁用ValidatesOnDataErrors

[英]Disable ValidatesOnDataErrors if CheckBox is Checked WPF

如果選中某個復選框,我試圖在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>

不是在運行時更改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>

用這個,

Validation.ErrorTemplate="{x:Null}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM