2010-08-05 120 views
1

我有一個Silverlight 4 RIA服務項目,我正在處理此問題,但無法驗證子窗口文本輸入。我有一個文本框像這樣:在Silverlight 4 RIA服務中驗證數據的問題

<TextBox Height="23" Name="txtSummary" Width="Auto" Grid.Row="2" Grid.Column="4" Text="{Binding DocumentView.Summary, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}"/> 

的DocumentView.Summary值從我的視圖模型獲得:

public DocumentSubmittedView DocumentView 
    { 
     get { return _DocumentView; } 
     set 
     { 
      if (_DocumentView != value) 
      { 
       _DocumentView = value; 
       OnPropertyChanged("DocumentView"); 
      } 
     } 
    } 

而且DocumentSubmittedView是它自己的自定義實體類:

namespace Data.Model.Entities { 

public class DocumentSubmittedView { 
    [Key] 
    public int DocID { get; set; } 

    [Required(ErrorMessage = "Summary Required")] 
    public string Summary { get; set; }  
} 

}

是否有任何理由爲什麼我無法獲得任何類型的錯誤驗證messa ge與以上信息?

謝謝。

回答

0

MSDN

目前,DataGrid控件是自動應用驗證屬性的唯一控制。有關將DataGrid控件與包含驗證屬性的類一起使用的示例,請參閱下面的數據網格示例。當您不使用DataGrid控件時,您必須手動驗證值。

如果您使用的不是DataGrid

手動驗證值

當你不使用DataGrid控件提供的接口進行編輯的數據,驗證屬性不是自動應用。但是,您可以使用Validator類手動應用驗證測試。您可以在屬性的set訪問器上調用ValidateProperty方法,以根據屬性的驗證屬性檢查值。當數據綁定從驗證屬性接收驗證異常時,您還必須將ValidatesOnExceptions和NotifyOnValidationError屬性設置爲true。有關手動應用驗證的示例,請參閱下面的數據綁定示例。

0

嗨,我沒有看到完整的代碼,但... 會不會是在創建對象DocumentSubmittedView摘要爲null。 OnPropertyChanged只有在摘要發生變化時纔會被觸發......因爲您沒有輸入任何內容,所以沒有理由更改。但是,如果您輸入的內容是摘要,那麼您的驗證規則是肯定的,並且沒有任何驗證錯誤的原因。 你可以做的是在總結輸入一些文字,然後將其刪除... 現在你可以看到,如果您的規則工程...

但這只是從我的頭頂看到您的一些行..

它可以幫助分配字符串。空在視圖模型的構造方法摘要屬性 HTH

1

如果您使用自定義的entites,未產生我的實體框架或LINQ2SQL,然後添加驗證邏輯到它的制定者,是這樣的:

[Range(0,1000)] 
[DataMember] 
public int Population 
{ 
    get { return _population; } 
    set { 
     Validator.ValidateProperty(value, 
      new ValidationContext(this, null, null) 
       { MemberName = "Population" }); 
     _population = value; 
     RaisePropertyChanged("Population"); 
    } 
} 

並在您的XAML文件中的TextBox元素上綁定標誌:

<TextBox Text="{Binding Population, 
Mode=TwoWay, NotifyOnValidationError=True,ValidatesOnExceptions=True}" />