2009-12-05 1 views
0

Я действительно застреваю, пытаясь реализовать службы RIA с MVVM и crud datagrid. Я думаю, что мне не хватает ключевой идеи. Все примеры, которые я видел, используют кнопку отправки или аналогичные, чтобы отправить данные обратно клиенту. Я скорее отправлю, как только строка будет добавлена ​​/ удалена/изменена. Я думал о парах подходов:Автоматически иметь viewmodel обновлять контекст домена и отправлять изменения (Silverlight/RIA Services Nov beta)

  • Свойство IEnuerable Itemsource автоматически привязано к контейнеру объектов моего контекста. Я пробовал это, но я не мог установить сущности контекста из свойства.
  • Захват событий изменения строки и вручную укажите мой контекст, который изменил элементы. Это не кажется правильным, хотя в проекте MVVM, учитывая, что мое свойство Commodity должно отражать изменения в datagrid.

Кроме того, как сообщить RIA Services, какой метод он должен использовать для конкретной операции crud? Это происходит на клиенте или сервере?

Примечание. Я использую Dataatrid ComponentOne, хотя я не думаю, что его поведение будет отличаться от обычного Silverlight datagrid для этого простого примера.

Вид:

<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> 

ViewModel:

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(); 
     } 



    } 

ответ

0

ИТАК, может быть, мой ответ актуален только для пользователей DataGrid C1 - но они реализовали специальный API для взаимодействия с RIA Services. Доступные детали here.