как сделать Collectionviewsource независимым от сущности и типа наблюдаемой коллекции - PullRequest
0 голосов
/ 31 января 2012

У меня есть пара фрагментов кода, которые я бы хотел сделать независимыми от типов.

Контекст: У меня есть файл edmx, сгенерированный из пары (8) таблиц из базы данных mssql. Используя linq для этих объектов, я хочу получить наблюдаемую коллекцию, которую я могу использовать в качестве источника для CollectionViewSource, который, в свою очередь, связан с сеткой данных. применить некоторую фильтрацию и т.д ..

проблема: Проблема, которую я получаю, состоит в том, когда я хочу, чтобы код для привязки / фильтрации / добавления строк / удаления строк не зависел от того, из какой таблицы я генерирую свою коллекцию. На данный момент я могу найти работоспособное решение, только если я использую коммутаторы в нескольких местах в моем коде. И я бы предпочел не в пользу способности повторного использования.

вопрос: Что мне делать, что мне нужно изменить, что мне не хватает. короче как избавиться от распределительных шкафов?

фрагмент кода:

        ent = new Access2SQLEntitiesCon();
        CVS = (CollectionViewSource)this.Resources["CVS"];
        ///don't want this \/
        switch (tbl_enum)
        {
            case 1:
                    var wnings = from woning in ent.tblWoning
                             where woning.volg == ProjNum
                             select woning;
                var _oc  =  new ObservableCollection<tblWoning>(wnings);
                _oc.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(OC_CollectionChanged);
                CVS.Source = _oc;
                    break;
        }
        //don't want that /\ 


        CVS.Filter += CVS_Filter;
        MakeFilterListEFM();

Итак, я могу опубликовать две другие проблемные области, но я думаю, что это подойдет на данный момент. Я понял, что могу изменить часть linq на что-то более динамичное, но не в этом проблема. Это наблюдаемая коллекция и ее обязательный тип ...: (

редактирование: продолжение: Я попытался бы использовать ObservableCollection <object>, но тогда моя DataGrid просто отображает кучу маленьких горизонтальных линий. Потому что он больше не знает, какие типы предметов он должен отображать. Может быть, есть способ добавить это в другую переменную en, указав (через шаблон данных?) Сетку данных, чтобы автоматически сгенерированные столбцы снова заработали.

изменить 2: Короче. Что мне нужно сделать, чтобы заменить ObservableConnection <tblWoning> на ObservableConnection <object> или ObservableConnection <dynamic>. Но сохраняя возможность автогенерации столбцов в сетке данных.

...