У меня отлично работает модель представления, которая в основном имеет следующие свойства:
-ItemCollection
- Name
- Type
- DayCollection
- DateOfDay
- Value
Я сейчас пытаюсь заставить представление работать, чтобы представить данные следующим образом:
Name | Type | DateOfDay1 | DateOfDay2 | DateOfDay3 ...
Dave | Actual| 1.2 | 1.8 | 5.4
Mary | Actual| 3.4 | 2.3 | 6.4
...
Проблема в том, что когда я связал ItemCollection с Datagrid в представлении, представление отображает:
Name | Type | DayCollection
Dave | Actual| (Collection)
Mary | Actual| (Collection)
Важно - в отличие от некоторых примеров ниже, мой вариант использования более прост - всеэлементы в ItemCollection всегда будут иметь одинаковое количество дней в DayCollection - т.е. все строки моей таблицы будут иметь одинаковое количество столбцов.Хотя обратите внимание, что разные ItemCollections могут иметь разное количество дней (но в пределах ItemCollection все Item будут иметь одинаковое количество дней), поэтому я не могу просто сгладить модель представления выше и иметь ItemCollection, например:
-ItemCollection
- Name
- Type
- Day1
- Day2
- Day3
, поскольку одна ItemCollection (таблица) может иметь 5 дней и 30 дней.
Я обнаружил следующие статьи, в которых говорится о динамическом добавлении столбцов - мне не нужно добавлять или удалять столбцы во время моегоedit - количество столбцов фиксировано:
https://www.codeproject.com/Articles/899637/Dynamic-Columns-in-a-WPF-DataGrid-Control-Part
http://www.unixresources.net/faq/320089.shtml
https://www.codeproject.com/Tips/676530/How-to-Add-Columns-to-a-DataGri
Я обнаружил, что вышеупомянутые образцы слишком сложны длячто-то, что я думал, было удивительно простым вариантом использования - переменное количество элементов (строк), но фиксированное (заранее определенное) количество столбцов в каждой строке [хотя последняя из вышеприведенных статей написана очень хорошо].Я надеялся, что смогу просто определить столбцы, используя повторяющийся xaml, например:
<DataGrid ...>
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Type" Binding="{Binding Type}" />
<Repeater ItemsSource="{Binding DayCollection}">
<DataGridTextColumn Header="{Binding DateOfDay}" Binding="{Binding Value}" />
</Repeater>
</DataGrid.Columns>
</DataGrid>
Что-то вроде вышеизложенного будет простым решением простого сценария использования, но, очевидно, не поддерживается
Я уверен, что есть простое решение этой простой проблемы, но я не могу найти способ достичь вышеупомянутого - статьи, на которые ссылаются выше, кажутся чрезмерными и предназначены для гораздо более сложного варианта использования (переменное число столбцов и столбцовэто может быть добавлено и удалено динамически) - мне не нужна эта гибкость, и я не хочу реализовывать ее только для того, чтобы получить фиксированное количество столбцов.
Единственная другая мысль, которая у меня была, былау меня есть свойство, такое как ToDataTable () в моей модели представления, которое будет выводить таблицу данных из моей модели представления, которая содержит полные строки и столбцы, с которыми я могу связать сетку данных, но опять же это кажется пустой тратой - и тогда это станет намного сложнеепроверить наличие обновлений и направить их в бизнес-логику ужеy присутствует в вышеупомянутой рабочей модели представления.
Есть ли простое решение, или я потратил много кода для простого варианта использования?