Автоматически заставить модель представления обновлять контекст домена и отправлять изменения (Silverlight / RIA Services, ноябрь, бета) - PullRequest
0 голосов
/ 05 декабря 2009

Я действительно застрял, пытаясь внедрить RIA Services с MVVM и грубой сеткой данных. Я думаю, что мне не хватает какой-то ключевой идеи. Все примеры, которые я видел, используют кнопку отправки или аналогичную для отправки данных клиенту. Я бы предпочел отправить, как только строка будет добавлена ​​/ удалена / изменена. Я подумал о паре подходов:

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

Кроме того, как мне сообщить RIA Services, какой метод следует использовать для конкретной операции 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>

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



    }

1 Ответ

0 голосов
/ 11 декабря 2009

Хорошо, так что, возможно, мой ответ относится только к пользователям C1 DataGrid - но они реализовали специальный API для взаимодействия со Службами RIA. Подробности доступны здесь .

...