2010-08-02 5 views
5

Pregunta rápida. Tengo un validador configurado en WPF que verifica que un valor se encuentre dentro de un rango específico. Esto funciona genial Ver código de abajo:WPF: Pasar valores a Reglas de validación a partir de datos encuadernados

<TextBox Name="valueTxt" Style="{StaticResource SquareBox}" GotKeyboardFocus="amountTxt_GotKeyboardFocus" GotMouseCapture="amountTxt_GotMouseCapture" LostFocus="boxLostFocus" Height="25" Width="50"> 
          <TextBox.Text> 
           <Binding Path="UnitCost" NotifyOnValidationError="True"> 
            <Binding.ValidationRules> 
             <local:ValidDecimal MaxAmount="1000"></local:ValidDecimal> 
            </Binding.ValidationRules> 
            <Binding.Converter> 
             <local:CurrencyConverter addPound="False" /> 
            </Binding.Converter> 
           </Binding> 
          </TextBox.Text> 
         </TextBox> 

Sin embargo, me gustaría pasar el validador otra pieza de datos de los datos que se está obligado. Supuse que simplemente podría añadir esto a la delcaration del validador de este modo:

<local:ValidDecimal MaxAmount="1000" SKU="{Binding Path=tblProducts.ProductSKU}"></local:ValidDecimal> 

Sin embargo, es parece que no puedo acceder al valor SKU de esta manera.

¿Alguna sugerencia?

Gracias,

EDIT bien puede valer la pena señalar que SKU es simplemente una cadena declarada en mi validador, así:

public class ValidDecimal : ValidationRule 
{ 
    public int MaxAmount { get; set; } 
    public string SKU { get; set; } 

    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     //validate the value as a decimal in to two decimal places 
     string cost = (string)value; 
     try 
     { 

      decimal decCost = decimal.Parse(cost); 
      if (SKU != "85555") 
      { 
       if (decCost <= 0 || decCost > MaxAmount) 
       { 
        return new ValidationResult(false, "Amount is not within valid range"); 
       } 
      } 
      return new ValidationResult(true, null); 

     } 
     catch (Exception ex) 
     { 
      return new ValidationResult(false, "Not a valid decimal value"); 
     } 
    } 
} 

Respuesta

4

Usted tiene que usar propiedad de dependencia, Visual Studio ya se dijo tú eso.

Leer: http://dedjo.blogspot.com/2007/05/fully-binded-validation-by-using.html

+6

El enlace ayudó, pero Visual Studio no me ha dicho nada. No es un tipo de IA inteligente que puedo consultar. No estoy seguro de lo que quería decir con eso – Sergio

+0

esto funciona, estoy de acuerdo, pero exagero para mí. – zinking

+0

aquí hay otra forma: http://stackoverflow.com/questions/7456334/wpf-binding-property-in-validationrule –

Cuestiones relacionadas