我可以将一些验证设置为TextBox实例上的默认设置吗?

时间:2015-02-12 07:19:57

标签: c# wpf validation mvvm

在我的程序中,我有很多文本框。

它们都是通过MVVM-Pattern绑定的。

一切都很好。现在我想实现某种验证,并决定使用Validationrules AND的混合! IDataErrorInfo的。 经过几次测试后,一切运行良好。 但现在我有一个问题。

我写了我的XAML代码

<TextBox Style="{StaticResource TextBoxStyle}" Width="150" >
    <TextBox.Text>
        <Binding Path="Name" Mode="TwoWay" ValidatesOnDataErrors="True" ValidatesOnExceptions="True" UpdateSourceTrigger="PropertyChanged" />
    </TextBox.Text>
</TextBox>

假设我总共有40个TextBoxes。我总是要写

Mode="TwoWay" ValidatesOnDataErrors="True" ValidatesOnExceptions="True" UpdateSourceTrigger="PropertyChanged"

或者我可以将其设置为某种默认值吗?

由于三个属性,我不想创建派生的TextBox。

1 个答案:

答案 0 :(得分:1)

首先,Textbox.Text默认绑定TwoWay,因此无需在此处指定。另一方面,我想到的唯一想法是创建一个CustomBinding。

    public class MyBinding : Binding
{
    public MyBinding()
        :base()
    {
        this.Mode = BindingMode.TwoWay;
        this.ValidatesOnDataErrors = true;
        this.ValidatesOnExceptions = true;
        this.UpdateSourceTrigger = System.Windows.Data.UpdateSourceTrigger.PropertyChanged;
    }

    public MyBinding(string path) 
        : base(path)
    {
        this.Mode = BindingMode.TwoWay;
        this.ValidatesOnDataErrors = true;
        this.ValidatesOnExceptions = true;
        this.UpdateSourceTrigger = System.Windows.Data.UpdateSourceTrigger.PropertyChanged;
    }
}


<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <TextBox x:Name="txt">
        <TextBox.Text>
            <local:MyBinding Path="Value" />
        </TextBox.Text>
    </TextBox>
</Grid>