2010-08-02 6 views
5

Schnelle Frage. Ich habe einen in WPF konfigurierten Validator, der überprüft, ob ein Wert innerhalb eines bestimmten Bereichs liegt. Das funktioniert großartig. Siehe Code unten:WPF: Übergabe von Validierungsregeln aus gebundenen Daten

<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> 

Allerdings würde Ich mag den Validator ein weiteres Stück von Daten aus dem Datum zu übergeben, die gebunden wird. Ich nahm an, ich konnte einfach dies wie so des Prüfers zum delcaration hinzufügen:

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

ist jedoch scheint, dass ich nicht den SKU-Wert auf diese Weise zugreifen kann.

Irgendwelche Vorschläge?

Danke,

EDIT gut darauf hinzuweisen, sein kann, dass SKU einfach eine Zeichenfolge in meinem Validator deklariert ist, etwa so:

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"); 
     } 
    } 
} 

Antwort

4

Sie haben Abhängigkeitseigenschaft, Visual Studio zu verwenden, bereits gesagt, Du bist das.

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

+6

Der Link geholfen, aber Visual Studio hat mir nichts gesagt. Es ist keine Art von intelligenter KI, die ich abfragen kann. Nicht sicher, was Sie damit meinten – Sergio

+0

das funktioniert Ich stimme zu, aber übertrieben zu mir. – zinking

+0

Hier ist ein anderer Weg: http://stackoverflow.com/questions/7456334/wpf-binding-property-in-validationrule –

Verwandte Themen