Silverlight Dataform与MVVM和WCF Ria服务

时间:2011-03-14 23:23:20

标签: silverlight mvvm wcf-ria-services dataform

晚上好,

我正在寻找帮助我理解如何将Silverlight DataForm与使用WCF Ria Services的ViewModel相结合的人。我想要完成的是使用DataForm管理我的实体集合并利用其内置的导航,添加,编辑和删除功能。然而,我无法将其与ViewModel和Ria Services捆绑在一起。

根据我的理解,DataForm需要绑定到ObservableCollection<T>。但是当我从WCF Ria服务上下文查询时。即。

_context.Load(_context.GetAllCustomersQuery(), loadCustomersQueryCallback, true);

我会在回调方法中收到一个IQueryable,我必须像ObservableCollection<T>这样投射吗?

Customers = new ObservableCollection<Customer>(_context.Customers);

客户是我的ViewModel中的属性,如此......

    public ObservableCollection<Customer> Customers
    {
        get { return _customers; }
        set
        {
            if (_customers != value)
            {
                _customers = value;
                OnPropertyChanged("Customers");
            }
        }
    }

DataForm绑定到ViewModel的Customers属性,我能够看到来自我的数据源的数据,我可以在实体之间导航,我可以编辑现有实体并将更改保留回数据库但是我无法添加或删除entites。

我正在使用Customers属性做什么?我是否通过强制转换为新的ObservableCollection与上下文“断开连接”,因此实际上没有从上下文中添加或删除实体?

非常感谢任何帮助。

此致

2 个答案:

答案 0 :(得分:3)

我认为你在上一个问题中遇到了这个问题。创建新的ObservableCollection时,您已与集合更改跟踪(添加和删除)断开连接。不是使用OC,还有许多值得考虑的其他选择。在您的情况下,看起来EntitySet或EntityList可能是最好的选择。有关这些类型的完整概述,请查看collection binding in RIA Services SP1上的帖子。

答案 1 :(得分:0)

您可以使用:

Customers.Clear(); // Or dispose every customer if it is Disposable
Customers = new ObservableCollection(result.ToList());