|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Не знаю возможно ли такое. Если да - подскажите как. Примеры упрощённые для обучения. Есть словарь с двумя определёнными списками Dictionary1.xaml Код: 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.
Окно с двумя ListBox ссылающимися на эти списки Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Можно ли это всё как-то переопределить - чтобы в DataContext окна сослаться на общий источник, а потом в ListBox ссылаться только на имена списков. Что-то в таком духе (так не работает) Код: xml 1. 2. 3. 4. 5. 6. 7.
То есть получить, что-то аналогичное ссылке на источник и потом привязке к его свойствам. Суть в том, что хочу сделать несколько источников в словаре. В первоначальном варианте, надо при переключении наборов данных перебивать все привязки ItemsSorce элементов. Мне было бы гораздо удобнее, если изменить только в одном месте DataContext. Естественно, интересует как сделать это в XAML без кода C# - в учебных целям. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 11:07 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Ну попробуйте запихнуть эти два массива еще в один массив и обращайтесь к элементам по индексу а в контексте переключайте сами массивы-хранилища. Но в реальных приложениях так, конечно, не делают ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 11:24 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Shocker.Pro, спасибо за ответ! Вы имеете ввиду записать в словаре следующим образом? Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
НО указать ключи у вложенных элементов невозможно (или я не знаю как). Если же их не указывать, то каким образом указать привязки в ItemsSorce ? Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
Shocker.ProНо в реальных приложениях так, конечно, не делаютДа, согласен. Здесь цель несколько иная - учебная. Допустим, при редактировании XAML окна - показываются элементы словаря (или другого XAML ресурса). А в приложении привязка DataContext окна устанавливается на данные приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 12:00 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Eld HaspНО указать ключи у вложенных элементов невозможно (или я не знаю как). Если же их не указывать, то каким образом указать привязки в ItemsSorce ?Я же написал - обращение по индексу. Типа Item[0]. Только надо повспоминать/погуглить, как там обратиться к элементу массива, если мы и так в контексте массива ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 12:07 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Eld HaspЗдесь цель несколько иная - учебная. Раз цель учебная, то лучше запихнуть все данные в XML, и использовать XmlDataProvider. У списков, соответственно, будут просто разные XPath в биндингах. Это несколько полезнее с практической т.з. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 12:11 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Shocker.Pro, я понял Вас об обращении по индексу. Но, насколько знаю, в XAML такое не возможно. Или я ошибаюсь? Поэтому у Вас вторично, более конкретно, поинтересовался - "Что надо указать в привязке ItemsSource?" Сон Веры Павловны, спасибо за внимание к моему вопросу. Конечно можно сделать так Файл DataXML.xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
XAML Код: xml 1. 2. 3. 4. 5. 6. 7.
Но использование XML - не решит данный вопрос так как мне хотелось бы. Цели такие: 1. Имеется ли возможность это сделать средствами только XAML? Может быть создать какой-нибудь дополнительный класс, но чтобы он визуально отображался в XAML при редактировании? Включая возможность изменения привязки DataContext из элемента WPF. 2. Если потом в приложении поменять Window.DataContext на источник с данными, чтобы не пришлось менять привязки ItemsSource элементов окна. С использованием XmlDataProvider привязки устанавливаются с помощью XPath, а хотелось бы оставить их в виде {Binding Свойство}. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:12 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Eld HaspНо, насколько знаю, в XAML такое не возможно. Или я ошибаюсь?ошибаетесь Eld HaspМожет быть создать какой-нибудь дополнительный класс, но чтобы он визуально отображался в XAML при редактировании?Это решение, которое напрашивается в качестве контейнера, но вы же сами запретили пользоваться C# ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:17 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Shocker.ProEld HaspМожет быть создать какой-нибудь дополнительный класс, но чтобы он визуально отображался в XAML при редактировании?Это решение, которое напрашивается в качестве контейнера, но вы же сами запретили пользоваться C#Это и будет MVVM, под это и заточен WPF ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:17 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
в Binding можно использовать индексатор ItemsSource="{Binding [0], Source={StaticResource MyRes}}" ItemsSource="{Binding [1], Source={StaticResource MyRes}}" Код: 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.
Думаю намекать на то, что индексатор может быть и строковым не нужно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:53 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Eld Hasp1. Имеется ли возможность это сделать средствами только XAML? Может быть создать какой-нибудь дополнительный класс, но чтобы он визуально отображался в XAML при редактировании? Разумеется: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Eld Hasp2. Если потом в приложении поменять Window.DataContext на источник с данными, чтобы не пришлось менять привязки ItemsSource элементов окна. С использованием XmlDataProvider привязки устанавливаются с помощью XPath, а хотелось бы оставить их в виде {Binding Свойство}. В такой постановке задача сводится к десериализации кастомного объекта из XAML-разметки. Вариантов здесь 2: 1) xml-данные от провайдера, как было показано выше, плюс десериализация в конвертере; 2) Писать свой объект, в XAML прописывать заполнение всех его свойств. Пример: 1. Данные: Код: 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.
2. Словарь с данными: Код: 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.
3. Фрагмент App.xaml: Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
4. Разметка окна: Код: 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.
Соответственно, можно датаконтекст окна переключить на Код: sql 1.
Мне вариант с XML-десериализацией в конвертере нравится больше - выглядит изящнее, и дает возможность использовать десериализацию с помощью XmlSerializer (а для возможности автоматической десериализации объекта из XAML накладывается слишком много всяких ограничений - например, возврат конкретной реализации (List<T>) вместо интерфейса является следствием этих ограничений). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:05 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Roman MejtesBinding [0]Вот прям так втупую path начинается с квадратной скобки? Я просто сам поленился попробовать, но думал, что надо использовать что-то типа Item, потому что где-то мне приходилось его использовать, но не помню где. Roman MejtesДумаю намекать на то, что индексатор может быть и строковым не нужно :)А как это поможет (если на C# мораторий)? Использовать какой-то необобщенный словарь в качестве хранилища? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:05 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Shocker.ProЭто решение, которое напрашивается в качестве контейнера, но вы же сами запретили пользоваться C#Я хочу избежать этого, если возможно. И в любом случае, если создавать такой дополнительный класс, то надо чтобы он отображал свои значения во время редактирования XAML. То есть создать класс, а объект (экземпляр) этого класс создать в XAML и там же присваивать ему значения. Но я плохо владею этой частью. Так что - это смутные мысли по моему представлению. Если можете - подскажите. Roman Mejtes,в Binding можно использовать индексаторСпасибо! Не знал. Подсказал Shocker.Pro - но я не понял как. Пробовал указывать просто номер индекса, а что-то вариант указания со скобками в голову не пришёл. Переделал так. Код: xml 1. 2. 3. 4. 5. 6. 7.
Уже ближе к тому чего добиваюсь. Но хотелось бы, если возможно, вариант с указанием ключей/свойств. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:27 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Eld HaspТо есть создать класс, а объект (экземпляр) этого класс создать в XAML и там же присваивать ему значения. Но я плохо владею этой частью. Так что - это смутные мысли по моему представлению. Если можете - подскажите. Выше же пример именно это и делает. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:31 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныВ такой постановке задача сводится к десериализации кастомного объекта из XAML-разметки. Если я правильно понял. То создать по объекту XML данные и их привязывать к DataContext. Получится несколько наборов XML данных - для времени редактирования и исполнения. И возможность переключения между ними. Я правильно понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:35 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Eld HaspИ в любом случае, если создавать такой дополнительный класс, то надо чтобы он отображал свои значения во время редактирования XAML.Зачем ему отображать СВОИ значения. Вы сделаете контейнер, а значения будете ЗАДАВАТЬ в XAML. Фактически заменить ArrayList на собственный контейнер, все остальное - то же самое. По идее, можно попробовать с ListDictionary - задавать ключи с помощью x:Key, а обращаться к ним через индексатор. Тогда может прокатит без кода на C# ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:37 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныВыше же пример именно это и делает. Ещё не успел разобраться с ним - только смотрю. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:38 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Shocker.ProПо идее, можно попробовать с ListDictionary - задавать ключи с помощью x:Key, а обращаться к ним через индексатор. Тогда может прокатит без кода на C#типа так, как вы и хотели изначально Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:41 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Shocker.ProЗачем ему отображать СВОИ значения. Вы сделаете контейнер, а значения будете ЗАДАВАТЬ в XAML. Фактически заменить ArrayList на собственный контейнер, все остальное - то же самое. По идее, можно попробовать с ListDictionary - задавать ключи с помощью x:Key, а обращаться к ним через индексатор. Тогда может прокатит без кода на C#Очень смутно в этой части (как создать и использовать свой контейнер) соображаю. Поэтому и обратился за помощью. Ключи во вложенных элементах ArrayList задать не получается, или я что-то не правильно делаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:42 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Eld HaspОчень смутно в этой части (как создать и использовать свой контейнер) соображаю. Поэтому и обратился за помощью. обычный POCO класс с двумя коллекциями Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:44 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Eld HaspКлючи во вложенных элементах ArrayList задать не получается, или я что-то не правильно делаю.Выше пример с ListDictionary, правда я не пробовал ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:45 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Shocker.Proобычный POCO класс с двумя коллекциями ..............А как его использовать в XAML? Класс создал в локальном пространстве, но с префиксом local: его не видно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:53 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Shocker.Proтипа так, как вы и хотели изначально Код: xml 1.
У меня на этой строчке ошибку выдаёт " Не удалось найти тип "col:ListDictionary"....". Может какие-то ссылки подключить надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:57 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
У меня впечатление складывается, что вы не почитали литературу по WPF, а пытаетесь все делать методом тыка. Не получится. Освойте неймспейсы, чтобы аббревиатура xmlns не казалась вам абракадаброй ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:07 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Shocker.Pro...... чтобы аббревиатура xmlns не казалась вам абракадабройНе спорю - порой кажется. Но в данном случае col у меня ссылается на "clr-namespace:System.Collections;assembly=mscorlib" ArrayList из этого же пространства. ListDictionary - из пространства System.Collections.Specialized. И по префиксу col - он не находится. Поэтому не пойму, то ли я что-то не так делаю. Толи ещё надо префиксы определить? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:28 |
|
DataContent на XAML (WPF)
|
|||
---|---|---|---|
#18+
Eld HaspShocker.Proобычный POCO класс с двумя коллекциями ..............А как его использовать в XAML? Класс создал в локальном пространстве, но с префиксом local: его не видно. Сон Веры ПавловныВыше же пример именно это и делает. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:34 |
|
|
start [/forum/topic.php?fid=21&fpage=5&tid=1440389]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
others: | 238ms |
total: | 433ms |
0 / 0 |