Допустим есть модель следующего вида:
public class Data
{
public ObservableCollection<Host> Hosts {get; private set;}
...
}
public class Host: INotifiPropertyChanged
{
public string HostName
{
get {return _hostName; }
set
{
_hostName = value;
NotifyOfPropertyChanged("HostName");
}
...
public ObservableCollection<Measurement> Measurements {get; private set;}
}
public class Measurement: INotifyPropertyChanged
{
public string Name {...}
public int Timeout {...}
public string Customer {...}
...
}
Т.о. есть список хостов, на каждом из которых проводятся измерения. Условием так же является то, что на каждом хосте проводятся одни и те же измерения, но характеристики измерений могут различаться от хоста к хосту. То есть, кол-во, имена и типы измерений на каждом хосте одинаковы, а остальные параметры, такие как таймаут, кастомер и пр., могут настраиваться. Вот такая иерархия.
Необходимо было отобразить список хостов с их характеристиками (имя и пр.) в табличной форме. Это просто. Однако так же необходимо в табличной форме отображать список всех измерений по всем хостам с указанием принадлежности к конкретному хосту. Т.е. что-то типа таблицы со следующими полями:
- Host name
- Measurement name
- Measurement timeout
- Measurement Customer и т.д.
И вот возник вопрос, как развернуть иерархическую структуру в плоскую таблицу с поддержкой отслеживания изменений в изначальной иерерхической структуре (добавление/удаление хостов, изменение параметров измерений и хостов).
Рассматривалась так же идея неиерархической структуры данных, но как-то меня это смущает. Есть идеи?
Я так и делал, но сложный путь получается. Во-первых, при полном перестроении plain data теряется выделение, группировки и прочее. Во вторых следить для синхронизации за довольно многими вещими тяжело.