|
Создание ссылки на ресурс из кода
|
|||
---|---|---|---|
#18+
Имем: некоторое окно с DataGrid или ListView (не особо важно). При двойном щелчке на одной из строк, вызывается редактор содержимого этой строки, т.е. открывается диалог для правки данных(на это есть причины). При этом, в основном окне, имеем ObjectDataProvider src из которого поступают данные в DataGrid(ListView). Требуется: Передать src в конструктор редактора содержимого, ибо src настроен определенным образом и делать его клоны или копии - не желательно. XAML основного окна (укорочено) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: plaintext 1. 2. 3. 4. 5. 6.
XAML редактора Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Этот код не работает!! Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2011, 14:25 |
|
Создание ссылки на ресурс из кода
|
|||
---|---|---|---|
#18+
Наверное, я чтото невнятно написал. Или никто не бадался с такой проблемой? Либо, не понятно, зачем это нужно? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2011, 18:55 |
|
Создание ссылки на ресурс из кода
|
|||
---|---|---|---|
#18+
Лучше найти способ передать через DataContext + Binding. Возможно заменить методы GetMaterials и GetMatWidths свойствами. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2011, 19:48 |
|
Создание ссылки на ресурс из кода
|
|||
---|---|---|---|
#18+
Алексей КЛучше найти способ передать через DataContext + Binding. Возможно заменить методы GetMaterials и GetMatWidths свойствами. Не выйдет. Ибо Binding данных редактора происходит в InitializeComponent(), т.е. до установки свойства DataContent Т.к данные для компонентов редактора брать не откуда, происходит полный "Exception" еще при конструировании объекта редактора. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2011, 20:11 |
|
Создание ссылки на ресурс из кода
|
|||
---|---|---|---|
#18+
СДмитрийВ, ... к тому-же DataContent занят данными редактируемой строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2011, 20:14 |
|
Создание ссылки на ресурс из кода
|
|||
---|---|---|---|
#18+
СДмитрийВНе выйдет. Ибо Binding данных редактора происходит в InitializeComponent(), т.е. до установки свойства DataContentНу и что? Изменился DataContext - обновились данные в контролах. СДмитрийВТ.к данные для компонентов редактора брать не откуда, происходит полный "Exception" еще при конструировании объекта редактора.Тут надо что-то менять. СДмитрийВСДмитрийВ, ... к тому-же DataContent занят данными редактируемой строки.Ну во первых, можно установить DataContext для каждого контрола индивидуально. Во вторых, DataContext корневого элемента можно присвоить объект, содержащий все необходимые данные. Второй вариант мне нравится больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2011, 12:01 |
|
Создание ссылки на ресурс из кода
|
|||
---|---|---|---|
#18+
Алексей К, resMatDataProvider используется в привязке (Binding), где нужны, по большому счету не объекты source и target а их, так скажем, интерфейсы связывания. В одном случае это DependencyProperty - статические члены определенного класса. В другом - используется Reflection определенного класса. Т.к. XAML не может определить объект какого типа(класса) ему подсунут и подсунут ли вообще в ближайшее время, получается привязка null=>target = Exception, что вполне логично. До того как привязать данные, загрузчик XAML проверяет наличие источника "интерфейса связывания" и уведомляет об отсутствии оного возбуждением исключения (если скомпилируется). Вот такая хитрожопость была мной проверена: Код: plaintext 1. 2. 3.
Тривиальный пример: Код: plaintext 1. 2. 3. 4. 5.
Попробуй теперь удалить <l:MyDataClass ...> ... верно. JIT компилятор выдаст ошибку. Не скомпилируется. Не соберется. Приложения не будет. Что будеш делать если: экземпляр класса MyDataClass уже существует в коде и должен быть источником данных для двух или более окон но не должен быть статическим? Если интересно: в одном окне оный является основным в другом подчиненным. Я-бы мог создать класс-обертку, заключающий в себе экземпляры MaterialDataProvider и DataRowView и передать его редактору в DataContext. Но это опять таки не прокатит. Вопрос в том, что-бы в ресурс XAML запихнуть экземпляр объекта из кода. Или, поставим вопрос по другому: Требуется чтобы XAML использовал объекты определяемые в коде. Но при загрузке и инициализации XAML словарь ресурсов окна сбрасывается, что в моем случае совершенно не уместно. Может есть другой путь? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2011, 23:45 |
|
Создание ссылки на ресурс из кода
|
|||
---|---|---|---|
#18+
СДмитрийВЯ-бы мог создать класс-обертку, заключающий в себе экземпляры MaterialDataProvider и DataRowView и передать его редактору в DataContext. Но это опять таки не прокатит.Мне кажется прокатит. Главное передавать не MaterialDataProvider, а объект, содержащий свойство с необходимыми данными. Впрочем - дело Ваше. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2011, 14:51 |
|
Создание ссылки на ресурс из кода
|
|||
---|---|---|---|
#18+
Resources. MergedDictionaries ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2011, 15:43 |
|
Создание ссылки на ресурс из кода
|
|||
---|---|---|---|
#18+
Алексей К, Попробуйте обойтись Property, DependecyProperty, DataContext и т.д Код: plaintext 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.
Это бесплатно. Пользуйтесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2011, 23:05 |
|
|
start [/forum/topic.php?fid=21&msg=37344830&tid=1442244]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 151ms |
0 / 0 |