2010-08-02 11 views
5

Hızlı soru. WPF'de yapılandırılmış, bir değerin belirli bir aralıkta olduğundan emin olmak için denetleyen bir doğrulayıcı var. Bu harika çalışıyor.WPF: Değerleri, gelen veriden Doğrulama Kuralları'na geçirme

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

Ancak, bağlanmış olan verilerden Validator verileri başka bir parça geçmek eder: Aşağıdaki kod bakınız.

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

Ancak, olup bu şekilde SKU değeri erişemez görünür: Ben sadece bu yüzden gibi doğrulayıcı delcaration bu katkı sağlayabileceğini üstlendi.

Herhangi bir öneriniz var mı?

sayesinde gibi pek SKU benim doğrulayıcıda ilan bir dize basitçe olduğunu de işaret değer olabilir

DÜZENLEME:

Sen bağımlılık özelliği kullanmak zorunda
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"); 
     } 
    } 
} 

cevap

4

, Visual Studio zaten söyledim sen bu

Oku: Bu benim için çalışıyor http://dedjo.blogspot.com/2007/05/fully-binded-validation-by-using.html

+6

bağlantı yardımcı oldu, ama görsel stüdyo bana hiçbir şey söylemedi. Onun sorgulayabildiğim bir çeşit hassas AI değil. – Sergio

+0

tarafından ne kastettiğinizden emin değilim, bu işe katılıyorum, ancak bana aşırı. – zinking

+0

başka bir yol: http://stackoverflow.com/questions/7456334/wpf-binding-property-in-validationrule –

İlgili konular