|
binding listbox к observecollection в xaml
|
|||
---|---|---|---|
#18+
Добрый день! Задача простая, но никак не могу ее разрешить. Хочу привязать observecollection к listbox в xaml-коде. Исходники следующие: класс объекта- строки представляющий собой запись в listbox Код: vbnet 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.
код окна MainWindow.xaml.vb Код: vbnet 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.
код xaml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Проблема в следующем: если я раскоментирую строку " ' Me.lbx.ItemsSource = recColl" , т.е. сделаю привязку в codebehind, то listbox отображает объекты, но мне нужно привязать декларативно- т.е. в xaml- разметке. Но listbox в таком случае получается пустым. В окне интерпретации пишет следующее сообщение : System.Windows.Data Error: 40 : BindingExpression path error: 'recColl' property not found on 'object' ''MainWindow' (Name='mwnd')'. BindingExpression:Path=recColl; DataItem='MainWindow' (Name='mwnd'); target element is 'ListBox' (Name='lbx'); target property is 'ItemsSource' (type 'IEnumerable') Как это можно обойти? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2016, 11:17 |
|
binding listbox к observecollection в xaml
|
|||
---|---|---|---|
#18+
vb_sub, я не силен в бейсиках есть подозрение, что Dim recColl = New ObservableCollection(Of dn) - это локальная переменная, биндиться же вы должны на public property. объявите recColl как public property ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2016, 12:00 |
|
binding listbox к observecollection в xaml
|
|||
---|---|---|---|
#18+
Crane11, делал по полной аналогии с http://www.cyberforum.ru/wpf-silverlight/thread539442.html там класс объявлен как Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
так же как и в этом посте поменял на ItemsSource="{Binding Path=recColl,RelativeSource={RelativeSource FindAncestor,AncestorType=Window}}" но чет не работает все равно ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2016, 12:17 |
|
binding listbox к observecollection в xaml
|
|||
---|---|---|---|
#18+
vb_sub, 1) public ObservableCollection<Person> ppl; - это не property, биндинг на него не будет работать. объявите как свойство. 2) читайте про INotifyPropertyChanged ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2016, 12:29 |
|
binding listbox к observecollection в xaml
|
|||
---|---|---|---|
#18+
vb_sub, кстати, у Вас тут без INotifyPropertyChanged отработает, поскольку ItemsSource смотрит на ObservableCollection и при добавлении нового элемента INotifyCollectionChanged стрельнет, но отсутствие понимания зачем и как работает INotifyPropertyChanged вам потом аукнится. public ObservableCollection<Person> ppl {get;set;} тот пример запускает. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2016, 12:40 |
|
binding listbox к observecollection в xaml
|
|||
---|---|---|---|
#18+
vb_subтак же как и в этом посте поменял на ItemsSource="{Binding Path=recColl,RelativeSource={RelativeSource FindAncestor,AncestorType=Window}}" Не верьте всему, что пишут в интернетах - там часто пишут ерунду. В данном случае, например, у окна и у листбокса датаконтекст один и тот же, и никакой поиск по иерархии не нужен. Причина, как уже написали выше - recColl должно быть свойством, а не полем. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2016, 13:15 |
|
binding listbox к observecollection в xaml
|
|||
---|---|---|---|
#18+
весело наверное, потом такой код разгребать, когда коллега уволится :) mydn, ddep, очень информативно =) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2016, 14:02 |
|
binding listbox к observecollection в xaml
|
|||
---|---|---|---|
#18+
Roman Mejtes, ага, а открытие SQLReader в кодбехайнде не смутило :) да ну видно же, что код не промышленный человек первые шаги делает. Взял неудачный пример запустить его не получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2016, 14:13 |
|
binding listbox к observecollection в xaml
|
|||
---|---|---|---|
#18+
А можно удачный работающий пример байндинга к observecollection, чтобы было с чего начать? Что не так с открытием SQLReader в кодбехайнде ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 13:58 |
|
binding listbox к observecollection в xaml
|
|||
---|---|---|---|
#18+
vb_subА можно удачный работающий пример байндинга к observecollection, чтобы было с чего начать? Что не так с открытием SQLReader в кодбехайнде ? https://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwiGy-iSy7LPAhXMKiwKHcOWBJUQFggeMAA&url=https://msdn.microsoft.com/ru-ru/library/ms668604(v=vs.110).aspx&usg=AFQjCNH7yglcwltnXVkcJINIZpxGgtEzYw&sig2=Y081kQnF7EVULHo4_tXXeg&cad=rjt https://ru.wikipedia.org/wiki/Model-View-ViewModel ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 20:29 |
|
binding listbox к observecollection в xaml
|
|||
---|---|---|---|
#18+
создал viewmodel в отдельном классе Код: vbnet 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.
в xaml-коде подключил пространство имен и установил DataContext Код: 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.
codebehind окна Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Если я раскомментирую код, то все работает. То есть если я сделаю привязку визуальной модели в codebehind, то получается. Однако хочу сделать привязку визуальной модели в xaml. ErrorMessage: ссылка на объект не указывает на экземпляр объекта. То есть я понимаю, что xaml лезет в визуальную модель, но не находит нового экземпляра этой модели, поэтому нужно создать новый экземпляр VM, но я не могу понять где именно в модели нужно создать этот новый экземпляр, чтобы он нормально заработал в xaml- разметке. Подскажите в правильном направлении плиз. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2016, 15:51 |
|
|
start [/forum/topic.php?fid=21&fpage=10&tid=1440610]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
72ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 185ms |
0 / 0 |