Как структурировать viewmodels и модели с вложенными observablecollections
Я борюсь с этой концепцией, так как не смог найти хорошего примера или обильного обсуждения. Мне трудно понять, как структурировать приложение WPF MVVM, имеющее несколько вложенных коллекций.
Приложение предназначено для просмотра билетов технической поддержки из базы данных SQL2000. Коллекция билетов имеет отдельные коллекции событий, эскалаций и RMA. Один билет может относиться к нулю или более событий, эскалаций или RMA. Чтобы сделать это немного сложнее, я не просто показываю коллекции с тем, что я извлекаю из базы данных, я также предоставляю сводные и общие свойства, которые я хочу отобразить в DataGrid.
У меня есть
MainWindow
окно просмотра), TicketsView
(UserControl), и TicketView
(элемент управления UserControl). Они соответствуют MainWindowViewModel
, TicketsViewModel
, и TicketViewModel
соответственно. То есть Ticket
, Event
, Escalation
, и Rma
Классы моделей; и TicketRepository
класс, который взаимодействует с базой данных. Где я должен найти наблюдаемые коллекции и какими должны быть эти коллекции? Я могу создать ObservableCollection<Ticket>
; в TicketsViewModel
что то TicketsView.TicketsDataGrid
привязывается к; и просто создает TicketViewModel
когда SelectedItem
проходит Ticket
объект. Однако это не позволяет мне иметь свойства вычисления / итога в DataGrid.Любая помощь или руководство будут оценены по достоинству.
Что я уже пробовал:
Я уже пробовал создавать ObservableCollections только с объектом Model и создавать объект ViewModel после того, как SelectedItem передаст класс Model. Работает хорошо, если у меня нет никаких сводных/общих свойств; и если я следую более распространенному мнению о том, чтобы держать эти свойства вне ваших классов моделей.
Затем я создал ViewModels для всего, что требовало этих типов свойств, вместо того чтобы просто создавать их при передаче объекта. Это очень быстро усложняется, и кажется, что это может быть неправильно. Я в порядке, создавая все это.
TicketViewModel
предметов; так как имеется соответствующий TicketView
элемент управления UserControl. У меня нет взглядов, соответствующих EventViewModel
, EscalationViewModel
, или RmaViewModel
; как они только показываются в EventsDataGrid
, EscalationsDataGrid
, и RmasDataGrid
внутри TicketView
- Или это нормально? Или же у меня должна быть какая-то другая пользовательская коллекция или оболочка для этих коллекций, которая имеет свойства и объект модели со свойствами, которые я выставляю?
Potu Nani
private ObservableCollection & lt;holiday & gt; _HolidayListCollection;
public ObservableCollection< holiday> HolidayListCollection
{
get { return _HolidayListCollection; }
набор
{
_HolidayListCollection = значение;
On свойство changed();
}
}
и мне это нужно
HolidayListCollection = ClonedHolidayListCollection.Где (y=> y.Праздничный день.Значение.Год.ToString()==SelectedYear) as ObservableCollection & lt;holiday>;
но получить нулевое значение ?