C # как связать сетку данных с observableCollection классов с наблюдаемыми коллекциями, используя код позади - PullRequest
0 голосов
/ 14 мая 2019

У меня есть сетка данных, которая должна быть связана с наблюдаемой коллекцией следующего класса:

public class CfgCounters
{
    public int valuePresent { get; set; }
    public string Name { get; set; }
    public ObservableCollection<DateTime> obcDatetime { get; set; }
    public ObservableCollection<string> obcLastExecutedPP { get; set; }
    public ObservableCollection<int> obcNumDimsOK { get; set; }
}

У меня есть поэтому

ObservableCollection<CfgCounters> obcCounters = new ObservableCollection<CfgCounters>();

, который я заполняю экземплярами, а затем связываю с dtg с помощью dtg.ItemsSource = obcCounters;

результат enter image description here

, который явно не отображает объекты Таким образом, вопрос заключается в следующем: как я могу в коде позади показать (каким-либо образом сделать) эти наблюдаемые коллекции , используя код только ? Спасибо

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Вы должны преобразовать каждый CfgCounters объект в элемент с только скалярными свойствами, например ::

ObservableCollection<CfgCounters> obcCounters = new ObservableCollection<CfgCounters>();
...
dtg.ItemsSource = obcCounters.Select(x => new
{
    x.valuePresent,
    x.Name,
    obcDatetime = string.Join(",", x.obcDatetime.Select(y => y.ToString("yyyy-MM-dd"))),
    obcLastExecutedPP = string.Join(",", x.obcLastExecutedPP),
    obcNumDimsOK = string.Join(",", x.obcNumDimsOK)
}).ToArray();
0 голосов
/ 14 мая 2019

Ваши данные иерархичны, а ваше мнение - нет. Возможно, вы ищете:

  1. TreeView для отображения иерархических данных как есть.

  2. Или вы можете сгладить данные и использовать их в качестве источника таблицы данных. В примерах кода показана модель представления, унаследованная от модели данных, но также возможно преобразование кода в новый тип.

  3. Datagrid также может группировать списки. Но это здесь не подходит, см. 2.


Когда CSV не изменяется во время выполнения:

public class CfgCountersViewModel : CfgCounters
{

    public string obcDatetimeCsv => String.Join(",", obcDatetime);
    ...
}

Или когда дочерние элементы CfgCounters изменяются во время выполнения, что-то более сложное, например:

public class CfgCountersViewModel : CfgCounters, INotifyPropertyChanged
{
    public CfgCountersViewModel() 
    {
         // UpdateObcDatetimeCsv when obcDatetime changes
         obcDatetime.OnCollectionChanged += (sender, args) => 
         {
              obcDatetimeCsv = String.Join(",", obcDatetime);
         }
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...