第四步:编辑用户控件事件
这一步比较复杂,这里分小点讨论。为了调用WCF服务,先定义一下全局变量。
AcademeServiceClient academeSClient;
1.定义事件
由于实时需要Page页的DataGrid控件和用户控件的更新,这里引用事件委托机制,所以先对外定义一些公共的事件和绑定数据方法。在Page页上实现一些方法,比如添加、删除、更新数据之后刷新列表。
//添加Product事件
public delegate void ProductUpdatedHandler(object source, Product product);
public event ProductUpdatedHandler ProductUpdated;
//删除Product事件
public delegate void ProductDeletedHandler(object source);
public event ProductDeletedHandler ProductDeleted;
//编辑取消事件
public delegate void ProductEditCancelHandler(object source);
public event ProductEditCancelHandler ProductEditCancel;
//绑定数据方法
public void SetProduct(Product product)
{
this.DataContext = product;
}
2.更新数据这是保存按钮触发的事件,利用DataContext属性获取TextBox上面的值,异步调用SaveProduct方法实现更新和添加数据操作。这里更新和添加数据就是利用ProductID的值,添加数据的时候ProductID默认为0,不为0的时候就是更新数据,在SaveProduct方法中已经强调过了。
txtMessage.Text = "正在保存";
Product product = (Product)this.DataContext;
academeSClient.SaveProductCompleted +=
new EventHandler<SaveProductCompletedEventArgs>
(academeSClient_SaveProductCompleted);
academeSClient.SaveProductAsync(product);
在完成调用方法后,给出了一些提示性的文字。调用ProductUpdated方法刷新列表。
void academeSClient_SaveProductCompleted
(object sender, SaveProductCompletedEventArgs e)
{
txtMessage.Text = "更新成功";
ProductUpdated(this, e.Result);
}
3.添加数据点击添加按钮,新建Product 实例,然后点击保存按钮,实现保存操作,在保存事件中,既可以用于保存又可以用户新建。这里的添加数据事件仅仅给用户一个提示,但是需要保存到数据库,还需要点击上面的保存按钮。
if (btnAddNew.Content == "取消")
{
btnAddNew.C;
btnDelete.IsEnabled = true;
if (ProductEditCancel != null)
ProductEditCancel(this);
}
else
{
Product product = new Product();
this.DataContext = product;
btnDelete.IsEnabled = false;
btnAddNew.C;
}
4.删除数据
同添加数据一样,获取数据,然后异步调用DeleteProduct方法删除这条数据。
txtMessage.Text = "正在删除";
Product product=(Product)this.DataContext;
academeSClient.DeleteProductCompleted+=
new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>
(academeSClient_DeleteProductCompleted);
academeSClient.DeleteProductAsync(product);
在完成调用之后,给出了一些提示。调用ProductUpdated方法刷新列表。
void academeSClient_DeleteProductCompleted
(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
txtMessage.Text = "删除成功";
if (ProductDeleted != null)
ProductDeleted(this);
}