2010-08-02 38 views
5

Câu hỏi nhanh. Tôi có trình xác thực được định cấu hình trong WPF để kiểm tra để đảm bảo rằng giá trị nằm trong phạm vi cụ thể. Điều này làm việc tuyệt vời. Xem mã bên dưới:WPF: Chuyển giá trị cho Quy tắc xác thực từ dữ liệu bị ràng buộc

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

Tuy nhiên, tôi muốn chuyển cho trình xác nhận hợp lệ một phần dữ liệu khác từ dữ liệu bị ràng buộc. Tôi giả định rằng tôi chỉ có thể thêm điều này vào việc khắc phục trình xác thực như sau:

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

Tuy nhiên, dường như tôi không thể truy cập giá trị SKU theo cách này.

Mọi đề xuất?

Cảm ơn,

EDIT cũng Có thể là giá trị chỉ ra rằng SKU chỉ đơn giản là một chuỗi khai báo trong validator của tôi, như vậy:

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

Trả lời

4

Bạn phải sử dụng tài sản phụ thuộc, Visual Studio đã nói bạn đó.

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

+6

Các liên kết giúp, nhưng visual studio không cho tôi biết bất cứ điều gì. Nó không phải là loại AI thân thiết mà tôi có thể truy vấn. Không chắc chắn những gì bạn có nghĩa là do đó – Sergio

+0

công trình này tôi đồng ý, nhưng overkill cho tôi. – zinking

+0

dưới đây là một cách khác: http://stackoverflow.com/questions/7456334/wpf-binding-property-in-validationrule –

Các vấn đề liên quan