Привязка itemSource ListView в режиме = TwoWay

Извините за мой плохой английский. Я попытался связать список изображений в источнике представления списка:

ItemsSource="{x:Bind ViewModel.Images,Mode=TwoWay}"

In ViewModel I have a list of Images :

     public List<Image> Images
    {
        get { return _images; }
        set
        {
            _images = value;
            base.RaisePropertyChanged();
        }
    }

Когда режим привязки установлен на TwoWay, у меня возникает следующая ошибка:

Invalid binding path 'View Model.Reports': You can not associate the type 'System.Collections.Generic.List (posytron.epart.uwp.Models.DOM.Report)' to 'System.Object' without a converter

Если я устанавливаю режим привязки в OneWay, он работает!

Я уже разработал конвертер для преобразования логического значения в атрибут видимости.

Что должен содержать преобразователь? Кто-нибудь может мне помочь? Почему у меня эта ошибка?

Спасибо!!


person Marco.C    schedule 24.04.2016    source источник
comment
Пожалуйста, разместите ListView xaml и класс модели. Без этого трудно дать решение   -  person Archana    schedule 24.04.2016
comment
@LovetoCode +1, а еще зачем вам TwoWay в Listview?   -  person Stamos    schedule 24.04.2016


Ответы (1)


Я не использую 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
comment
Благодарю вас! Просто ошибка, казалось, говорила об обратном. Ошибка: вы не можете связать тип System.Collections.Generic.List (posytron.epart.uwp.Models.DOM.Report) с System.Object . Не будет ли правильнее ошибка Вы не можете связать тип System.Object с System.Collections.Generic.List (posytron.epart.uwp.Models.DOM.Report)? - person Marco.C; 25.04.2016