Silverlight 4.0 使用wcf服务引用类在silverlight中进行数据验证

Silverlight 4.0 使用wcf服务引用类在silverlight中进行数据验证,silverlight-4.0,data-annotations,wcfserviceclient,Silverlight 4.0,Data Annotations,Wcfserviceclient,嗨, 我使用wcf服务和silverlight,我的datacontract类在引用文件中公开,我将类类型的集合绑定到datagrid,当单击特定行编辑整行时,数据将绑定到dataform,在那里我必须验证字段,这里我使用IDataErrorInfo与validte的接口,在服务引用文件中,该类是一个部分类,创建了一个新的cs文件,该文件具有与servicefile相同的命名空间和类名,然后实现了IDataErrorInfo接口属性 公共字符串此[字符串] columnName]{} 在我的范围

嗨, 我使用wcf服务silverlight,我的datacontract类在引用文件中公开,我将类类型的集合绑定到datagrid,当单击特定行编辑整行时,数据将绑定到dataform,在那里我必须验证字段,这里我使用IDataErrorInfo与validte的接口,在服务引用文件中,该类是一个部分类,创建了一个新的cs文件,该文件具有与servicefile相同的命名空间和类名,然后实现了IDataErrorInfo接口属性

公共字符串此[字符串] columnName]{}

在我的范围内,我进行了验证。但它不起作用。任何人都可以为此提供帮助。
感谢使用Silverlight 4和WCF时,数据注释(如RequiredAttribute和DisplayAttribute等)不会传播到生成的客户端文件。 这是一个解决问题的方法。。。 使用模型(model.dll)创建类库 样品


公共部分类人员:INotifyPropertyChanged
{ 
专用字段;
私有字符串名称字段;
私有字符串LastNameField;
私人国际机场;
私有字符串字段;
///  
///对象的ID
///          
公共Guid ID
{ 
得到
{ 
返回IDField;
} 
设置
{ 
如果(值!=IDField)
{ 
ValidateProperty(值,新的ValidationContext(this,null,null){MemberName=“ID”});
IDField=值;
OnPropertyChanged(“ID”);
} 
} 
} 
///  
///人名
///  
[必需]
公共字符串名
{ 
得到
{ 
返回名称字段;
} 
设置
{ 
如果(值!=NameField)
{ 
ValidateProperty(值,新的ValidationContext(this,null,null){MemberName=“Name”});
名称字段=值;
不动产变更(“名称”);
} 
} 
} 
///  
///姓
///  
[必需]
公共字符串姓氏
{ 
得到
{ 
返回LastNameField;
} 
设置
{ 
如果(值!=LastNameField)
{ 
Validator.ValidateProperty(值,新的ValidationContext(this,null,null){MemberName=“LastName”});
LastNameField=值;
OnPropertyChanged(“姓氏”);
} 
} 
} 
///  
///年龄
///  
[射程(0120)]
//[必需]
公共信息
{ 
得到
{ 
返回年龄字段;
} 
设置
{ 
如果(值!=AgeField)
{ 
ValidateProperty(值,新的ValidationContext(this,null,null){MemberName=“Age”});
AgeField=值;
不动产变更(“年龄”);
} 
} 
} 
[正则表达式]
公共字符串电子邮件
{ 
得到
{ 
返回电子邮件字段;
} 
设置
{ 
如果(值!=电子邮件字段)
{ 
Validator.ValidateProperty(值,新的ValidationContext(this,null,null){MemberName=“Email”});
EmailField=值;
OnPropertyChanged(“电子邮件”);
} 
} 
} 
公共事件属性更改事件处理程序属性更改;
///  
///为指定的属性名称引发属性更改通知。
///  
///更改的属性的名称。
受保护的虚拟void OnPropertyChanged(字符串propName)
{ 
if(PropertyChanged!=null)
{ 
PropertyChanged(这是新PropertyChangedEventArgs(propName));
} 
} 
} 

在服务项目中,请参考此类库 服务的样本可以是

[ServiceContract] 
    public interface IPersonService 
    { 
        [OperationContract] 
        List<Person> GetPersons(); 

        [OperationContract] 
        Person GetPersonByID(Guid ID); 

        [OperationContract] 
        void EditPerson(Person PersonField);         

    } 


///////////////// 



public class PersonService : IPersonService 
    { 
        private List<Person> Persons; 

        public PersonService() 
        { 
            Persons = new List<Person>(); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Albert", LastName = "Pujols" , Age = 31, Email = "albert-p@mlb.com" }); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Alex", LastName = "Rodriguez", Age = 36, Email = "alex-r@mlb.com" }); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Evan", LastName = "Longoria", Age = 25, Email = "evan-l@mlb.com" }); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Joey", LastName = "Votto", Age = 25, Email = "joey-v@mlb.com" }); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Miguel", LastName = "Cabrera", Age = 27, Email = "miguel-c@mlb.com" }); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Kendry", LastName = "Morales", Age = 26, Email = "kendry-m@mlb.com" }); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Alexei", LastName = "Ramirez", Age = 28, Email = "miguel-c@mlb.com" }); 
        } 


        public List<Person> GetPersons() 
        { 
            return Persons; 
        } 

        public Person GetPersonByID(Guid ID) 
        { 
            return (from sel in Persons where sel.ID == ID select sel).First(); 
        } 

        public void EditPerson(Person PersonField) 
        { 
            Person Person = (from sel in Persons where sel.ID == PersonField.ID select sel).First(); 
            Person = PersonField; 
        }        

    }
[服务合同]
公共接口IPersonService
{ 
[经营合同]
列出GetPersons();
[经营合同]
Person GetPersonByID(Guid ID);
[经营合同]
无效编辑人员(人员字段);
} 
///////////////// 
公共类PersonService:IPersonService
{ 
私人名单人员;
公共人员服务()
{ 
人员=新列表();
添加(新的人{ID=Guid.NewGuid(),Name=“Albert”,LastName=“Pujols”,Age=31,Email=“Albert-p@mlb.com" }); 
添加(新人物{ID=Guid.NewGuid(),Name=“Alex”,LastName=“Rodriguez”,Age=36,Email=“Alex-r@mlb.com" }); 
添加(新的人{ID=Guid.NewGuid(),Name=“Evan”,LastName=“Longoria”,Age=25,Email=“Evan-l@mlb.com" }); 
添加(新的人{ID=Guid.NewGuid(),Name=“Joey”,LastName=“Votto”,Age=25,Email=“Joey-v@mlb.com" }); 
添加(新人物{ID=Guid.NewGuid(),Name=“Miguel”,LastName=“Cabrera”,Age=27,Email=“Miguel-c@mlb.com" }); 
添加(新人物{ID=Guid.NewGuid(),Name=“Kendry”,LastName=“Morales”,Age=26,Email=“Kendry-m@mlb.com" }); 
添加(新的人{ID=Guid.NewGuid(),Name=“Alexei”,LastName=“Ramirez”,Age=28,Email=“miguel-c@mlb.com" }); 
} 
公众人士名单
{ 
返回人员;
} 
公众人物GetPersonByID(Guid ID)
{ 
返回(sel中的sel,其中sel.ID==ID选择sel).First();
} 
公共人员(人员字段)
{ 
Person Person=(从Persons中的sel,其中sel.ID==PersonField.ID选择sel)
[ServiceContract] 
    public interface IPersonService 
    { 
        [OperationContract] 
        List<Person> GetPersons(); 

        [OperationContract] 
        Person GetPersonByID(Guid ID); 

        [OperationContract] 
        void EditPerson(Person PersonField);         

    } 


///////////////// 



public class PersonService : IPersonService 
    { 
        private List<Person> Persons; 

        public PersonService() 
        { 
            Persons = new List<Person>(); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Albert", LastName = "Pujols" , Age = 31, Email = "albert-p@mlb.com" }); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Alex", LastName = "Rodriguez", Age = 36, Email = "alex-r@mlb.com" }); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Evan", LastName = "Longoria", Age = 25, Email = "evan-l@mlb.com" }); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Joey", LastName = "Votto", Age = 25, Email = "joey-v@mlb.com" }); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Miguel", LastName = "Cabrera", Age = 27, Email = "miguel-c@mlb.com" }); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Kendry", LastName = "Morales", Age = 26, Email = "kendry-m@mlb.com" }); 
            Persons.Add(new Person { ID = Guid.NewGuid(), Name = "Alexei", LastName = "Ramirez", Age = 28, Email = "miguel-c@mlb.com" }); 
        } 


        public List<Person> GetPersons() 
        { 
            return Persons; 
        } 

        public Person GetPersonByID(Guid ID) 
        { 
            return (from sel in Persons where sel.ID == ID select sel).First(); 
        } 

        public void EditPerson(Person PersonField) 
        { 
            Person Person = (from sel in Persons where sel.ID == PersonField.ID select sel).First(); 
            Person = PersonField; 
        }        

    }
<UserControl x:Class="SampleApp.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
             xmlns:dataInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input" 
    d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"> 

    <Grid x:Name="LayoutRoot" Background="White"> 
        <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="55*" /> 
            <ColumnDefinition Width="45*" /> 
        </Grid.ColumnDefinitions> 
        <sdk:DataGrid Name="dataGrid1" Grid.Column="0" IsReadOnly="True" AutoGenerateColumns="False" SelectionChanged="dataGrid1_SelectionChanged" FontSize="12"> 
            <sdk:DataGrid.Columns> 
                <sdk:DataGridTextColumn CanUserSort="True" Binding="{Binding ID}" Visibility="Collapsed" /> 
                <sdk:DataGridTextColumn CanUserSort="True" Binding="{Binding Name}" Header="Name" Width="100" /> 
                <sdk:DataGridTextColumn CanUserSort="True" Binding="{Binding LastName}" Header="LastName" Width="100" />                 
            </sdk:DataGrid.Columns> 
        </sdk:DataGrid> 
        <Grid Grid.Column="1"> 
            <Grid.ColumnDefinitions> 
                <ColumnDefinition Width="40*" /> 
                <ColumnDefinition Width="50*" /> 
                <ColumnDefinition Width="10*" /> 
            </Grid.ColumnDefinitions> 
            <Grid.RowDefinitions> 
                <RowDefinition Height="30"/> 
                <RowDefinition Height="30"/> 
                <RowDefinition Height="30"/> 
                <RowDefinition Height="30"/> 
                <RowDefinition Height="150"/> 
            </Grid.RowDefinitions> 
            <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" Text="Name" Grid.Row="0" Margin="4" /> 
            <TextBox x:Name="Name" Text="{Binding Name, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" Grid.Row="0" Grid.Column="1" Margin="4" /> 

            <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" Text="LastName" Grid.Row="1" Margin="4" /> 
            <TextBox x:Name="LName" Text="{Binding LastName, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" Grid.Row="1" Grid.Column="1" Margin="4" /> 

            <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" Text="Age" Grid.Row="2" Margin="4" /> 
            <TextBox x:Name="Age" Text="{Binding Age, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" Grid.Row="2" Grid.Column="1" Margin="4" /> 

            <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" Text="Email" Grid.Row="3" Margin="4" /> 
            <TextBox x:Name="Email" Text="{Binding Email, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" Grid.Row="3" Grid.Column="1" Margin="4" /> 

            <dataInput:ValidationSummary Margin="4" Grid.Row="4" Grid.ColumnSpan="3" /> 


        </Grid> 



    </Grid> 
</UserControl>
public partial class MainPage : UserControl 
    { 
        private PersonServiceClient Client; 
        private EndpointAddress AddressService = new EndpointAddress(new Uri("http://localhost:3589/PersonService.svc")); 

        public MainPage() 
        { 
            InitializeComponent(); 

            Client = new PersonServiceClient(new BasicHttpBinding(), AddressService); 
            Client.GetPersonsAsync(); 
            Client.GetPersonsCompleted += new EventHandler<GetPersonsCompletedEventArgs>(Client_GetPersonsCompleted); 
        } 

        void Client_GetPersonsCompleted(object sender, GetPersonsCompletedEventArgs e) 
        { 
            ObservableCollection<Person> PersonItems = e.Result; 
            dataGrid1.ItemsSource = PersonItems;             
        } 

        private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
        { 
            DataContext = e.AddedItems[0]; 
        } 
    }