2010-06-29 71 views
7

我在表单中有大约100个TextBoxes。我需要验证他们,如果他们是小数例如。 这有效,但它太冗长了,我不想在XAML中有800行代替100行。Howto WPF绑定书面内联=简式

<TextBox.Text> 
    <Binding Path="MyPath" UpdateSourceTrigger="PropertyChanged" Stringformat="{}{0:N}" NotifyOnValidationError="True"> 
     <Binding.ValidationRules> 
      <myRulesNamespace:MyValidationRule ValidationType="decimal" /> 
     </Binding.ValidationRules> 
    </Binding> 
</TextBox.Text> 

有没有什么办法如何将它重写成这样的简短形式? :

Text="{Binding MyPath, UpdateSourceTrigger='PropertyChanged', StringFormat='{}{0:N}', NotifyOnValidationError=True, ValidationRules NOW WHAT?}" 

回答

6

简答:你不行。 Validation-rules属性是一个集合,目前无法在Binding简写中写入这些属性。

但是,您可以创建一个类从绑定,这样的传承:

public class SuperBinding:Binding 
{ 
    public SuperBinding() 
    { 
     UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
     ValidationRules.Add(new MyValidationRule{ValidationType = typeof(decimal)}); 
     //set rest of properties 
    } 
} 

然后用这个来代替正常的绑定标签。

2

如果包含在一个列表容器控制你的100个文本框,如列表框或ListView,你可以把这个绑定到一个DataTemplate。然后验证规则将应用于每个项目。

由于可以对任何容器控件进行重新模板化,所以仍然可以获得所需的布局。