![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
В Xaml есть DataTemplate. Однако перед тем, как присвоить определенному элементу DataTemplate, мне необходимо его немного подправить (присвоить дополнительный Binding, который невозможно задать декларативно). Я получаю из ресурсов DataTemplate, но как получить определенный контрол этого DataTemplate - не пойму. Судя по сигнатуре метода DataTemplate.FindName, обращаться к элементам DataTemplate можно только для конкретного инстанса. Как быть?
Это сообщение отредактировал(а) Idsa - 28.8.2008, 14:01 |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
Вроде бы нашел работающее решение: http://blogs.msdn.com/scmorris/archive/200...at-runtime.aspx (заголовок Defining a DataGrid Template Column / Dynamic).
Однако я все еще готов выслушать ваши предложения ![]() Это сообщение отредактировал(а) Idsa - 28.8.2008, 14:02 |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
Не понравился мне этот метод... Во-первых, генерировать код из xaml'а на лету - дорого, во-вторых при таком подходе в xaml'е не должно быть обработчиков событий (а это не есть гуд).
Решил выбрать альтернативный вариант - создать DataTemplate через код. Нашел мануальчик - сделал. Да вот только почему-то WPF DataGrid ругается в духе "для этого DataTemplate IsSealed должно быть True". Мне стало интересно, а нельзя ли подсмотреть, в какой код превращается тот DataTemplate, который я создавал в xaml. Было бы замечательно увидеть разницу и понять, что же я сделал не так. |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
||||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
Уже вырисовывается целая детективная история, а решения все нет.
Итак, понадобилось мне создать динамический DataTemplate для WPF DataGrid. Сначала решил воспользоваться методом XamlReader.Load. Однако при использовании этого подхода в xaml не должно быть обработчиков (а мне они были нужны). Банальный workaround - присвоить обработчики элементам (в случае грида - ячейкам) после применения DataTemplate. Однако оказалось, что в WPF DataGrid нет возможности обратиться к определенной строке или ячейке. Подробнее об этом - здесь: http://forums.msdn.microsoft.com/en-US/wpf...91-c54560805452. Так что с этим подходом у меня вышел облом. Второй способ - создавать DataTemplate через код. Как я писал выше, при реализации этого подхода у меня вылетал Exception с информацией о том, что DataTemplate должен быть Sealed. Один из разработчиков DataGrid здесь посоветовал мне вызвать метод Seal для DataTemplate. Я уж было обрадовался, думаю, вот он мой спаситель... но где уж там. После того, как я последовал рекомендации, Exception перестал вылетать, но вместе с ним перестали срабатывать обработчики событий. Судя по описанию метода Seal в MSDN:
в этом нет ничего странного. Хотя в целом мне непонятно, почему при создании DataTemplate через xaml все ок, а через код - куча проблем. Пока я надеюсь на то, что разработчики DataGrid еще отпишутся и выручат меня, либо исправят эту багу (если это не моя бага ![]() Эх... |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
Решил проблему, перейдя на Xceed DataGrid Express. Также, благодаря переходу, решилась и еще одна проблема: http://forum.vingrad.ru/forum/topic-226406.html
|
|||
|
||||
namespace |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 4.7.2006 Репутация: нет Всего: нет |
и мне необходимо получить контрол
![]() у меня есть ListBox, элементами которого являются ComboBox, в общем мне нужно каждому ComboBox дать ItemsSource попробую создать ListBox из кода ... |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
А как на счёт того, чтобы генерить DataTemplate в code-behind?
-------------------- СУВ, Partizan. |
|||
|
||||
namespace |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 4.7.2006 Репутация: нет Всего: нет |
я сделал проще, создал свой контрол в виде StackPanel а в ней уже ComboBox-ы
|
|||
|
||||
DenWPF |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
Так и не понял как эта проблема решается,
что вобоещ у меня есть.
я хочу оставить лист бокс и DataTemplate убрать и написать его кодом. как это сделать? |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |