Я действительно застреваю, пытаясь реализовать службы 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();
}
}