
 January 10, 2012 09:40 by 
 Scott
 ScottLets start by updating the Code Behind of the Mainage.xaml .
Step 1: 
Add a event handler for RowEditEnded .
This would give me the updated values of the Row . With this I would be able to update the update the cell and commit it. This event would help me trace the updated values . This event handler is to be added in the constrcutor of the Mainpage.xaml .
articleDataGrid.RowEditEnded += new EventHandler<DataGridRowEditEndedEventArgs>(articleDataGrid_RowEditEnded);
Step 2:
Implement the event handler for RowEditEnded .
I simply put the code to update the article and saving the context in the block .
void articleDataGrid_RowEditEnded(object sender, DataGridRowEditEndedEventArgs e)
{
    try
    {
        if (e.EditAction == DataGridEditAction.Commit)
        {
            articleId = ((Article)e.Row.DataContext).ArticleID;
            Article art = (from article in context.Articles
                          where article.ArticleID == articleId
                          select article).First();
            art.ArticleID = ((Article)e.Row.DataContext).ArticleID;
            art.AuthorID = ((Article)e.Row.DataContext).AuthorID;
            art.Body = ((Article)e.Row.DataContext).Body;
            art.Title = ((Article)e.Row.DataContext).Title;
            context.SubmitChanges();
            MessageBox.Show("Article was sucessfully Updated"); 
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Updating Article failed :" + ex.Message);
    }
}
Step 3 :
Make sure you load the context in the Constructor of the MainPage class .
context.Load(context.GetArticlesQuery());
We are done. Run the App. Modify the Body or the Title . The Field would be sucessfully updated .

So we are done with Updation . I still need to add the validation to this .
Lets add validation then .
For this example we will go for basic validation . Just go ahead and add a Required attribute to the Domainservice Metadata that was generated .
Your Final Metadata class (DataDomainService.metadata.cs ) would look like as follows :
DataDomainService.metadata.cs
namespace SL2wayWCFRia.Web
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using System.ServiceModel.DomainServices.Hosting;
    using System.ServiceModel.DomainServices.Server;
    // The MetadataTypeAttribute identifies ArticleMetadata as the class
    // that carries additional metadata for the Article class.
    [MetadataTypeAttribute(typeof(Article.ArticleMetadata))]
    public partial class Article
    {
 
        // This class allows you to attach custom attributes to properties
        // of the Article class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class ArticleMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private ArticleMetadata()
            {
            }
            [Required]
            public int ArticleID { get; set; }
            [Required]|
            public Nullable<int> AuthorID { get; set; }
            [Required]
            public string Body { get; set; }
            [Required]
            public string Title { get; set; }
        }
    }
}
Now give it a run .
Make the AuthorId field empty and press tab to move to the next field you would get a message as shown below :
