在我的程序中,我有很多文本框。
它们都是通过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。
答案 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>