ObservableCollection (ReadOnly) для редактирования - PullRequest
1 голос
/ 29 апреля 2011

У меня есть SL4 WCF / RIA LOB, с которым я учусь.У меня есть представление SQL, возвращающее текущий инвентарь как IQueryable.Поскольку это представление SQL, оно помечено как доступное только для чтения, и это то, что я хочу / без изменений в БД.

На внешнем интерфейсе (просмотр) я хочу заполнить DataGrid информацией, но разрешить ее редактирование, когда пользователь выбирает доступные ресурсы.Мне кажется, что привязка DataGrid должна быть к другой коллекции, которой я могу манипулировать в памяти.

В настоящее время у меня есть типичный DDS, выполняющий запрос со спины:

<riaControls:DomainDataSource AutoLoad="True" LoadedData="qryInventoryDds_LoadedData" 
                                  Name="qryInventoryDds" QueryName="GetQryInventoriesQuery" >
        <riaControls:DomainDataSource.DomainContext>
            <my:DomainService1 />
        </riaControls:DomainDataSource.DomainContext>
    </riaControls:DomainDataSource>

Если кто-то может подсказать, как мне «скопировать» этот e.Entities или что-то подобное, чтобы я мог манипулировать им и затем связать его, я был бы очень признателен.

Я ищу пару дней идействительно не могу найти хороших примеров.

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 01 мая 2011

Что я сделал, так это перебрал возвращенную коллекцию, создав новую коллекцию ObservableCollection, которая не является частью domaincontext. Я считаю, что это известно как глубокая копия.

Кажется, что нет способа "легко" извлечь редактируемую коллекцию из представления SQL, поскольку VS отмечает все свойства бизнес-объекта как первичные ключи. Есть некоторые стратегии, которые я прочитал / попробовал, например, пометив все поля COALESCE (правильно, null) в представлении SQL, но это не сработало для меня. Также некоторые пытаются отредактировать базовую модель XML, но это необходимо делать при каждом изменении представления, что весьма проблематично.

Если кто-нибудь знает лучшее решение, я весь в ушах.

Спасибо.

0 голосов
/ 30 апреля 2011

Попробуйте это.

<data:DataGrid x:Name="myDataGrid" ItemsSource="{Binding ElementName=qryInventoryDds, Path=Data}" RowDetailsVisibilityMode="VisibleWhenSelected">
...