Я не использую Tempalte 10, а только обычное приложение UWP для проверки вашей проблемы, и я думаю, что воспроизвел вашу проблему.
Сообщение об ошибке может немного отличаться из-за модели шаблона 10, но я думаю, что ошибка та же.
Если я устанавливаю режим привязки в OneWay, он работает!
Если вы используете односторонний режим {x:Bind}, ItemSource
вашего ListView
является целью привязки, а ваш List<Image> Images
в ViewModel является источником привязки. Очевидно, ваш источник представляет собой список элементов управления Image
. Тип ItemSource
— это System.Object, а источником привязки здесь является элемент управления List типа Image. По умолчанию элемент данных отображается в ListView как строковое представление объекта данных, к которому он привязан. Поэтому, когда xaml не может распознать эту строку, он напрямую использует реализацию метода ToString, чтобы вернуть имя типа и отобразить его в элементе. Одним словом, ItemSource
как цель привязки выполнила работу по преобразованию типов.
Но при использовании режима TwoWay ItemSource является целью привязки, а также источником привязки, так же как и List<Image> Images
. Он хорошо работает в шаблоне «ItemSource = цель привязки», причину, которую я объяснил выше, но если «ItemSource = источник привязки», он не будет автоматически преобразовывать тип System.Object в ваш тип списка. Также вы можете сказать, что у вас нет преобразователя для преобразования типа System.Object в нужный вам тип.
Но я не думаю, что здесь нужна двухсторонняя привязка. Привязка TwoWay Обновляет целевой или исходный объект при их изменении. При создании привязки целевое свойство обновляется из источника. Из вашего кода я не вижу, чтобы вы могли изменить элементы управления изображениями в элементах, чтобы обновить исходный список. Если вы просто хотите динамически добавлять, удалять или редактировать элементы в ListView, вы можете использовать режим OneWay здесь и изменить список в коде позади.
person
Grace Feng
schedule
25.04.2016