2010-08-05 83 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}" />