|
Binding и INotifyPropertyChanged
|
|||
---|---|---|---|
#18+
имею след. класс: Код: 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.
класс совершенно обычный, создан для теста, так же существует класс со списком ObservableCollection<Person> и вьюха в виде DataGrid'а Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Проблема вся в том, что когда в биндинге колонки (например: Binding="{Binding Key}") я указываю {Binding (my:Person.Key)} программа при запуске выдает исключение Argumnt Null Exceptoin "Key cannot be null." Но, если я убирают наследование интерфейса INotifyPropertyChanged ошибки не возникает. Проще говоря ошибка возникает только тогда, когда я наследую интерфейс. С чем это связано? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2014, 08:56 |
|
Binding и INotifyPropertyChanged
|
|||
---|---|---|---|
#18+
Roman MejtesС чем это связано? С тем, что запись вида {Binding (my:Person.Key)} задает для биндинга возврат значения attached property Key, зарегистрированной в public static классе Person, а вовсе не возврат поля Key класса Person. Что там происходит дальше - нужно смотреть по стектрейсу. И да, зачем здесь INPC, если нигде не вызывается PropertyChanged? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2014, 09:05 |
|
Binding и INotifyPropertyChanged
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Это просто пример, по этому вызов метода отсутствует, но он погоду не делает. Но если я не наследую интерфейс всё же работает и значения свойства класса Person нормально биндится.. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2014, 09:08 |
|
Binding и INotifyPropertyChanged
|
|||
---|---|---|---|
#18+
Roman Mejtes, во-первых, при упоминании ошибок следует приводить стектрейс. Выглядит он примерно так: Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
Во-вторых, если связываемый класс реализует INPC, то фреймворк на рантайме устанавливает свои обработчики событий. В-третьих, биндинги вычисляются на рантайме через рефлекшн. Если фреймворк видит, что компонент реализует INPC, то следует попытка вычислить биндинг, и к результату привязать INPC. Биндинг в данном случает возвращает пустую ссылку на экземпляр, следует попытка привязки обработчика - и ArgumentNullException. В-четвертых, не нужно забивать гвозди пассатижами - они предназначены не для этого. Используйте обычный синтаксис привязки свойств, если у вас эти свойства - не attached. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2014, 09:39 |
|
|
start [/forum/topic.php?fid=20&tid=1402882]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
46ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 325ms |
total: | 466ms |
0 / 0 |