0

我真的被困在尝试使用 MVVM 和 crud 数据网格实现 RIA 服务。我想我错过了一些关键的想法。我见过的所有示例都使用提交按钮或类似按钮将数据发送回客户端。我宁愿在添加/删除/修改一行后立即提交。我想到了几种方法:

  • 让我的 IEnuerable Itemsource 属性自动绑定到我的上下文的实体容器。我试过了,但我无法从属性中设置上下文的实体。
  • 捕获行更改事件并手动告诉我的上下文已更改项目。考虑到我的 Commodity 属性应该反映数据网格中的变化,这在 MVVM 设计中感觉不对。

此外,我如何告诉 RIA 服务它应该对特定的 crud 操作使用什么方法?这会发生在客户端还是服务器上?

请注意,我使用的是 ComponentOne 数据网格,但对于这个简单的示例,我认为它的行为与普通的 Silverlight 数据网格没有什么不同。

看法:

<c1grid:C1DataGrid x:Name="C1Grid"                                    AutoGenerateColumns="False"
ItemsSource="{Binding Commodities}">
<c1grid:C1DataGrid.Columns>
<c1grid:DataGridTextColumn Binding="{Binding Name, Mode=TwoWay}"></c1grid:DataGridTextColumn> 
</c1grid:C1DataGrid.Columns>
</c1grid:C1DataGrid>

视图模型:

public class CommodityViewModel : Model
    {
        private CommodityContext _context;
        private Commodity _selectedCommodity;

        public IEnumerable<Commodity> Commodities
        {
            get { return _context.Commodities;}
            //Setter wont work here

        }

        public CommodityViewModel()
        {

            _context = new CommodityContext();
            _context.Load(_context.GetCommoditiesQuery(), (LoadOperation<Commodity> loadOperation) =>
            {
                RaisePropertyChanged("Commodities");
                _context.Commodities.EntityAdded += Commodities_EntityAdded;

            }, null );

        }

        private void Commodities_EntityAdded(object sender, EntityCollectionChangedEventArgs<Commodity> e)
        {
            //how does RIA know to use my AddCommodity method on the server side? Where do I set this?
            _context.SubmitChanges();
        }



    }
4

1 回答 1

0

好吧,也许我的回答只与 C1 DataGrid 的用户有关——但他们已经实现了一个特殊的 API 来与 RIA 服务交互。可在此处获取详细信息。

于 2009-12-11T09:20:36.607 回答