ObservableCollection <someentity> not refresh </someentity>

时间:2011-01-31 17:19:26

标签: silverlight-4.0 wcf-ria-services

我正在为我的应用程序使用Silverlight 4和MVVM模式。我有一个绑定到一个页面的列表框说one.xaml,它的viewmodel是oneviewmodel.cs。这是我加载相册集的页面。我在该页面上有一个按钮,弹出一个页面以添加新专辑。假设该页面为two.xaml,并且其viewmodel为twoViewModel.cs。在这个页面上我打电话给ria服务: -

context.albums.add(somealbum);

并提交更改。相册已添加,我可以在sql server中看到该记录。但是当弹出窗口关闭时,我的列表框仍会显示过时的数据。我是否需要再次向服务器发出请求以加载刚刚添加的新实体?因此,基本上我必须使用消息传递模式并请求oneviewmodel.cs再次加载实体。这是正确的做法吗?

这是我加载专辑实体的方法: -

  var qry = AlbumContext.GetAlbumsQuery(_profile.UserId);
            AlbumContext.Load<Album>(qry, new Action<System.ServiceModel.DomainServices.Client.LoadOperation<Album>>(albums => {

                if (GetAlbumsComplete != null)
                {

                    if (albums.Error == null)
                    {
                        GetAlbumsComplete(this, new EntityResultArgs<Album>(albums.Entities));
                    }
                    else
                    {
                        GetAlbumsComplete(this,new EntityResultArgs<Album>(albums.Error));
                    }
                }

            }), null);

这使用与Shawn Wildermuth相同的模式和类。

提前致谢:)

1 个答案:

答案 0 :(得分:1)

您无需再次从服务器加载所有内容,但需要将新专辑添加到ObservableCollection中。到目前为止,您只将它添加到DomainContext。 您可以执行以下两个选项之一:

1)使用

将新专辑直接添加到集合中
collection.Add(somealbum);

2)我假设您在GetAlbumsComplete()中填写了ObservableCollection。只需再次执行该部分,以便ObservableCollection填充DomainContext.Albums的内容。