带有RIA服务的Silverlight 4 - 刷新绑定到CollectionView的Datagrid

时间:2010-12-15 20:15:40

标签: silverlight-4.0 wcf-ria-services

以下是我的情况:

我的Silverlight 4页面中有一个域数据源。我从RIA服务中提取了相关实体,并使用集合视图将它们显示在同一页面上。

在按钮点击事件中,我插入/添加一个实体(请参阅下面的代码段)。

如何刷新数据网格?我做错了什么?

我知道数据正在插入数据库中,无法离开页面并返回时无法刷新网格。

DomainContext ctx = new DomainContext();
foreach (<Entity> x in EntityList)
      {
        <Entity> y = new <Entity>
        {
          .... <set values>
        };             

        ctx.<Entity>.Add(y);

      }

      ctx.SubmitChanges();
      DomainDataSource.Load(); ;
      CollectionView.View.Refresh();               

3 个答案:

答案 0 :(得分:3)

尝试更改您的负载以使用RefreshCurrent。

ctx.Load(query,LoadBehavior.RefreshCurrent,GetCategoriesByLevelQuery_Loaded,null);

可用的三种加载行为:

保持当前(默认值):表示客户端上缓存的版本不会随加载操作而更改。实体不会使用新信息进行更新。

合并到当前:如果没有对缓存实体进行任何修改,它将使用加载操作实体进行更新。如果用户将编辑数据,这似乎是最安全的选项,因为用户不希望丢失他们在提交之前输入的数据。

刷新当前:将使用来自加载操作实体的信息更新缓存中的所有实体。这可以覆盖用户已做但未提交的更改。小心这个选项。

答案 1 :(得分:1)

我的问题是在我的domaindatasource添加“外部”。

这是我最终做的事情:

DomainContext ctx = (MyDDS)DomainDataSource.DomainContext; //new DomainContext();
foreach (<Entity> x in EntityList)
  {
    <Entity> y = new <Entity>
    {
      .... <set values>
    };             

    ctx.<Entity>.Add(y);

  }

  ctx.SubmitChanges();
  ....
  private void MyDDS_SubmittedChanges(object sender, SubmittedChangesEventArgs e)
{
  MyDDS.Load();
}

不确定这是否是最佳方式,但它对我有用。

答案 2 :(得分:0)

正确的方法是在DomainDataSource.DataView中添加新项,而不是在DomainDataSource.DataContext中添加:

在原始代码中:

DomainDataSource.DataView.Add(y);

这会对分页产生一些影响。新项目将添加到当前页面中,扩展其大小。刷新后,将调整大小。

参考:here