Развертыванием иерархии в табличную форму. Нужно ли это? - CodeHelper

Развертыванием иерархии в табличную форму. Нужно ли это?

1

Допустим есть модель следующего вида:

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 и т.д.

И вот возник вопрос, как развернуть иерархическую структуру в плоскую таблицу с поддержкой отслеживания изменений в изначальной иерерхической структуре (добавление/удаление хостов, изменение параметров измерений и хостов).

Рассматривалась так же идея неиерархической структуры данных, но как-то меня это смущает. Есть идеи?

Новые ответы


1

Самое простое что приходит в голову — сделать в классе ViewModel (если используется MVVM или подобный паттерн) метод/свойство, который будет преобразовывать граф объектов в табличную форму. Допустим создаем класс

public class DataRecord
{
    public string HostName { get; set; }
    public string MeasurementName { get; set; }
    public int MeasurementTimeout { get; set; }
    public string MeasurementCustomer { get; set; }
}

Затем в модели вида создаем метод

public IList<DataRecord> PlainData
{
    get
    {
        return Data --> PlainData; // конвертируем данные в табличную форму
    }
}

При этом работа в модели и сервисах идет с экземплярами Data, а вот binding и построение UI осуществляется с использованием табличного представления.

Для отслеживания изменений DataRecord может хранить ссылку на исходный граф объектов и следить за переназначением их свойств.

Alexander

Я так и делал, но сложный путь получается. Во-первых, при полном перестроении plain data теряется выделение, группировки и прочее. Во вторых следить для синхронизации за довольно многими вещими тяжело.


v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.