|
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 |
|
|
start [/forum/topic.php?fid=21&msg=39698305&tid=1440398]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 237ms |
total: | 506ms |
0 / 0 |