|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Хочу использовать для всех столбцов DataGrid-а CellTemplateSelector, чтобы отображать содержимое ячеек несколькими типовыми способами. Столбцы создаются программно, из набор заранее неизвестен. Проблема в том, что набор шаблонов ячеек универсальный и от столбца не зависит. Но у шаблона ячейки контекст-то - это строка, а не ячейка. То есть универсальный шаблон не знает, какое именно поле нужно дернуть из текущего контекста строки, чтобы отобразить его в качестве ячейки. Конечно, можно создавать отдельный селектор для каждого столбца, тогда селектор будет знать, какие данные нужно отобразить из контекста строки. Но как сообщить эту информацию выбранному шаблону? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 10:11 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Увидел DataGridBoundColumn Пытаюсь разобраться в принципе его работы ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 11:32 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Можно унаследоваться от DataGridTemplateColumn, в унаследованный класс перетащить определение Binding из DataGridBoundColumn, и переопределить 2 метода как-то так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
тогда разметка самого грида будет выглядеть так: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
и DataTemplate вот так: Код: xml 1. 2. 3. 4.
- DataGridTemplateColumn в качестве результата отработки GenerateElement/GenerateEditingElement всегда возвращает ContentPresenter, у которого ContentTemplate - как раз DataTemplate ячейки. Разумеется, в рабочем коде использование TagProperty лучше заменить на attached property для ContentPresenter'а. А в тестовом проекте у меня все вполне заработало и так. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 12:37 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Можно создать ской тип колонки и наследовать его от класса DataGridBoundColumn, это позволит использовать как биндинг, остается только переопределить методы Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Готово :D В методе LoadTemplateContent необходимо будет настроить все Binding'и ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 13:50 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Roman MejtesГотово :D В методе LoadTemplateContent необходимо будет настроить все Binding'иВот это я и не догоняю как сделать. Генерить контент с помощью кода не хочу - хочу шаблон из ресурса. И вот этому шаблону нужно каким-то образом установить нужный датаконтекст ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 14:19 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Я вообще не понимаю, в какой момент этот метод вызывается. Я думал, что в dataItem я обнаружу свой row, однако фиг ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 14:21 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, На базе твоей идеи замутил так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
вроде заработало, ща буду развивать ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 14:31 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
хотя еще вопрос, как это будет вести себя с виртуализацией строк... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 14:35 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Shocker.ProRoman MejtesГотово :D В методе LoadTemplateContent необходимо будет настроить все Binding'иВот это я и не догоняю как сделать. Генерить контент с помощью кода не хочу - хочу шаблон из ресурса. И вот этому шаблону нужно каким-то образом установить нужный датаконтекст Датаконтекст контента у ContentPresenter'а - это, как ни странно, сам контент ( см. ). Поэтому нужно просто забиндить контент: Код: c# 1. 2. 3. 4. 5. 6. 7.
Тогда в шаблоне можно сразу писать Код: xml 1. 2. 3.
В тестовом примере это работает вполне нормально. И вполне откликается на изменения забинденного на колонку свойства модели. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 17:33 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Ну тут понятно, вариантов несколько. Я просто не разобрался с вариантом Романа, а понять его тоже хочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 18:53 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Shocker.ProСон Веры Павловны, Ну тут понятно, вариантов несколько. Я просто не разобрался с вариантом Романа, а понять его тоже хочется. Вот рабочий пример, как я понимаю, того, что вам надо: Example Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 23:04 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
немного фиксов добавил, чтоб редактирование ячеек работало и лишний мусор почистил Ninja Fixes Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 01:45 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Roman MejtesProgressbarО, чёрт, я думал мне в голову пришла гениальная мысль За пример спасибо, ща посмотрю ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 04:14 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Спасибо еще раз, усё ясно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 04:36 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Что-то в итоге не получается прикрутить ни одну из озвученных здесь идей. Грубо говоря, набор строк представляет собой коллекцию классов Row Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Нужно отобразить Value (и/или другие поля) с помощью шаблона, который по имени TemplateName будет найден в ресурсах (вопрос кэширования поиска ресурсов пока не обсуждаем) Пример Романа использует фиксированный шаблон на все ячейки, хоть и через байндинг Пример Сна/мой работает до тех пор, пока не начинаешь прокручивать строки (с виртуализацией) - дальше байндинг слетает и вместо Cell контекстом становится Row. В общем, пока не справился с задачей. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 11:42 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Хотя нет, наврал, сорри. Работает вариант Сна с присвоением контента контентпрезентору, полученному через base.GenerateEditingElement ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 11:52 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Попробуй поменять тип виртуализации с VirtualizingStackPanel.VirtualizationMode="Recycling" на VirtualizingStackPanel.VirtualizationMode="Standard" ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 12:37 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Roman MejtesПопробуй поменять тип виртуализации с VirtualizingStackPanel.VirtualizationMode="Recycling" на VirtualizingStackPanel.VirtualizationMode="Standard"Ага. Для этого 21664070 наверное помогло бы, но я в итоге забайндил ContentPresenter.ContentProperty ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 12:44 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Shocker.ProRoman MejtesПопробуй поменять тип виртуализации с VirtualizingStackPanel.VirtualizationMode="Recycling" на VirtualizingStackPanel.VirtualizationMode="Standard"Ага. Для этого 21664070 наверное помогло быда ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 12:54 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Shocker.Pro, А почему шаблон не на колонку, а на ячейку? Задача такая? Вроде колонки всегда единообразно выглядят. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 12:58 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Petro123Вроде колонки всегда единообразно выглядят.Действительно. А CellTemplateSelector придумали дураки от нечего делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 13:00 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Shocker.ProRoman MejtesПопробуй поменять тип виртуализации с VirtualizingStackPanel.VirtualizationMode="Recycling" на VirtualizingStackPanel.VirtualizationMode="Standard"Ага. Для этого 21664070 наверное помогло бы, но я в итоге забайндил ContentPresenter.ContentPropertyТакой вариант (установка DataContext на контейнер) был бы интересен с той точки зрения, что можно было бы использовать DataGrid.CellStyle для каких-то глобальных вещей, например установки бэкграунда ячейки. Но с ним творится какая-то дикая херня - в контексте стиля попеременно появляются Row и Cell ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 13:08 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Shocker.Pro, Теперь понятно). ОК. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 13:14 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
если нужна динамическая возможность переключать вид ячеек, то TemplateSelector для данной задачи не подходит Так как тип определяется по сути 1 раз и до момент создания нового объекта. Используйте просто шаблоны и переключайте их триггерами ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 13:31 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Shocker.ProShocker.Proпропущено... Ага. Для этого 21664070 наверное помогло бы, но я в итоге забайндил ContentPresenter.ContentPropertyТакой вариант (установка DataContext на контейнер) был бы интересен с той точки зрения, что можно было бы использовать DataGrid.CellStyle для каких-то глобальных вещей, например установки бэкграунда ячейки. Но с ним творится какая-то дикая херня - в контексте стиля попеременно появляются Row и Cell Этот вариант абсолютно бесполезен, там установленный датаконтекст держится чуть меньше, чем нисколько, потому что его потом переопределяет ItemsPresenter, внутри которого размещены эти DataGridCell. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 13:32 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Roman Mejtesесли нужна динамическая возможность переключать вид ячеек, то TemplateSelector для данной задачи не подходитВообще-т работает Ну как динамически? По сути скроллинг с включенной виртуализацией - это и есть динамически. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 13:32 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Roman Mejtes, Там скрины выше приведены совсем не для динамики имхо. Смотрел селектор на ячейку. Это юз кейс - покрасить ячейку или шрифт красным при выше порога значении. Могу ошибаться. В винформс всегда стиль назначал руками) в коде). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 13:38 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Petro123Там скрины выше приведены совсем не для динамики имхо.Скрин там приведен вообще не для иллюстрации задачи. Ты, как обычно, не вникал. Отображение прогресс-индикатора в моем случае, это один шаблон, а не несколько. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:08 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Shocker.ProТы, как обычно, не вникал.тебе как обычно твоя важность мешает привести свой скрин и ответить на вопрос, зачем данные мешать с визуализацией по каждой ячейке. Пытался вникнуть, но не шмогла). Закрывай топик. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:15 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Shocker.Pro Код: c# 1. 2. 3. 4. 5. 6.
Вот так у меня было. Но понятно, что тут меньше динамики чем у тебя. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:25 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Почему-то у всех, кто много и подробно ответил по делу, вопрос "почему" не возник, зато поумничать и задать глупые вопросы - это я всегда знаю, к кому обратиться. Впрочем, отвечу. Сервер генерит отчет и отдает его клиенту, чтобы тот отобразил. Формат передачи данных унифицирован. Есть десятка полтора шаблонов для ячейки - текст, дата, прогресс, деньги и т.п. (в том числе несколько интерактивных), данные о шаблоне присылает сервер (шаблон может распространяться на столбец, строку или ячейку). Если у тебя возникнет настойчивое желание задать вопрос, почему я не использую Report Engine, будь готов отвечать на вопросы, а не просто язык почесать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:32 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
+ хранить имя шаблона в модели представления, это несколько нарушает MVVM, имхо :) там в примере нет прогресс бара, на самом деле, это обычный бордер, но суть не в этом. в более поздней версии примера я прикрутил еще пару представлений, для больших ячеек и т.д. я не совсем понимаю в чем проблема, заменить тип int на пользовательский в свое время через это всё я делал DataGrid где для каждой ячейке можно было задать форматирование, в том числе и условное и т.д. И делалось всё это, точно так же. Стиль ячейки определялся в модели представления и загружался из XML модели, которую в него подсовывали. Может накидаете пример, того, что у вас не получается? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:38 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Shocker.ProПочему-то у всех, кто много и подробно ответил по делу, вопрос "почему" не возник, зато поумничать и задать глупые вопросы - это я всегда знаю, к кому обратиться.ты меня новичка с ними профессионалами не ровняй). Просто отвечай если не лень без шелухи и всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:41 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Shocker.Proданные о шаблоне присылает сервер (шаблон может распространяться на столбец, строку или ячейку).я выше написал как я пересылал. Но я сам запросом мог дописать колонки со стилями. Если вы не можете то и ладно. Нет вопросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:43 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Roman MejtesМожет накидаете пример, того, что у вас не получается?Да всё уже получилось, я ж написал. Просто небольшую ошибку допустил в ворохе разных проб. Roman Mejtes+ хранить имя шаблона в модели представления, это несколько нарушает MVVM, имхо :)В данном случае значение данных ячейки и способ из отображения - это данные модели. То, что название способа в модели на данный момент совпадает с названием шаблона в представлении - это упрощение на этапе внедрения. Как я написал выше - способ отображения определяет сервер (в виде указания способа отображения столбца, строки или ячейки). Это позволяет не иметь на клиенте отдельную модель представления под каждый конкретный отчет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:47 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Petro123, Стиль ячейки (шаблон в данном случае) формируется из свойств столбца, строки и самой ячейки (в порядке возрастания приоритета). Если бы шаблон определялся только столбцом, этой темы не было бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:50 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
У меня было так: Id field1 field2 color_field3 2 45.6 Ivan clRed 4 33 Nikola clBlue Особенности: - вместо цвета бывало имя класса css для http. - стили колонок не в динамике, а в проектировании. - стиль просто удобно было брать сразу из базы. Там бизнес логика стиля. Что не всегда бывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:51 |
|
DataGridTemplateColumn.CellTemplateSelector - определение столбца в шаблоне
|
|||
---|---|---|---|
#18+
Shocker.ProPetro123, Стиль ячейки (шаблон в данном случае) формируется из свойств столбца, строки и самой ячейки (в порядке возрастания приоритета). Если бы шаблон определялся только столбцом, этой темы не было бы.ну ОК. Все прояснили. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:52 |
|
|
start [/forum/topic.php?all=1&fid=21&tid=1440398]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
147ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 231ms |
total: | 485ms |
0 / 0 |