2010-06-29 13 views
7

Tengo alrededor de 100 cuadros de texto en un formulario. Necesito validarlos si son decimales, por ejemplo. Esto funciona, pero es demasiado detallado, no quiero tener 800 en lugar de 100 filas en XAML.Howto WPF Encuadernación escrita en línea = formulario corto

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

¿Hay alguna manera de cómo volver a escribir en la forma abreviada de esta manera? :

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

Respuesta

6

Respuesta corta: No se puede. La propiedad Validation-rules es una colección, y actualmente no hay forma de escribir esto en la taquigrafía Binding.

Sin embargo, puede crear una clase que hereda de unión, así:

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

y luego usar que en lugar de la etiqueta de unión normal.

2

Si contenida sus 100 cuadros de texto en un control contenedor lista, como un cuadro de lista o ListView, se puede poner esta unión en un DataTemplate. Entonces la regla de validación se aplicaría a cada elemento.

Dado que es posible volver a crear la plantilla de cualquier control de contenedor, aún podrá obtener el diseño que desee.

Cuestiones relacionadas