2011-10-24 11 views
10

Sorun bağlıyor:

EntityCollectionView içine yeni bir öğe ekleyerek dize alanları için gerekli doğrulama kaldırdı, ama benim amaç için biz sunucu tarafında doğrulama sonra göstermelidir.

Gerçek davranışı: İşte

olan meta dosyasından kodu:EF. dize alanları için gerekli doğrulama hatası [Gerekli] olmadan yükseltmek

[MetadataTypeAttribute(typeof(SomeEntityMetadata))] 
public partial class SomeEntity 
{ 
    [EntityName] 
    internal sealed class SomeEntityMetadata 
    { 
     private SomeEntityMetadata() 
     { 
     } 

     public long Id { get; set; } 

     [EntityName(Name = "Name", OrderIndex = 2)] 
     public string Name { get; set; } 

     [EntityName(Name = "Data Type", OrderIndex = 1)] 
     public string Type { get; set; } 

    } 
} 

Ve xaml DataGrid binded bu öğelerin bir koleksiyon:

<navigation:DataGridTemplateColumn CanUserReorder="True" 
            CanUserSort="True" 
            Header="Name" 
            SortMemberPath="Name"> 
    <navigation:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock VerticalAlignment="Center" Text="{Binding Name}"/> 
     </DataTemplate> 
    </navigation:DataGridTemplateColumn.CellTemplate> 
    <navigation:DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding Name, Mode=TwoWay}" Height="Auto"/> 
     </DataTemplate> 
    </navigation:DataGridTemplateColumn.CellEditingTemplate> 
</navigation:DataGridTemplateColumn> 
<navigation:DataGridTemplateColumn CanUserFilter="True" 
             CanUserSort="True" 
             Header="Type" 
             SortMemberPath="Type"> 
    <navigation:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock VerticalAlignment="Center" Text="{Binding Type}" /> 
     </DataTemplate> 
    </navigation:DataGridTemplateColumn.CellTemplate> 
    <navigation:DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ComboBox ItemsSource="{Binding DataTypes, Source={StaticResource entityViewModel}}" SelectedItem="{Binding Type, Mode=TwoWay}/> 
     </DataTemplate> 
    </navigation:DataGridTemplateColumn.CellEditingTemplate> 
</navigation:DataGridTemplateColumn> 

Gördüğünüz gibi alanlar için [Required] özniteliği yoktur, ancak yeni öğe eklerken Name ve Type alanlarınaolarak ayarlanmış hata kodları "Ad alanı gereklidir" ve "Tür alanı gerekiyor" belirir.

Gerekli davranışı: Atla doğrulama gerekli ve Name veya Type alanlar boş olduğunda sunucudan ValidationException atmak.

NOT: Silverlight, EF, WCF RIA, MVVM.

+1

Eğer doğrulama istisnası kendisi atmak isterseniz, sunucudan gidiş gelişi kaydetmek için, neden sunucudan yapmak istediğinizi, wcf Ria servisleri tarafından daha kolay hale getirildi. –

+0

@AkashKava, haklısınız, ancak bağlam içinde karmaşık bir kontrol yapmam gerekiyor. –

cevap

28

Bunun için size geçmesine istediğiniz özelliklerin üzerinde

[Required(AllowEmptyStrings=true)] 

ayarlayabilirsiniz.

+1

Teşekkürler! Yardımcı olur. –