Использование ViewModels в ObservableCollections в Prism - PullRequest
0 голосов
/ 19 января 2019

Насколько я знаю, по умолчанию способ использования коллекции ObservableCollection, связанной с представлением списка, заключается в использовании классов модели в качестве элементов (ObservableCollection<MyModel>). Поэтому, когда элемент listview выбран, мы используем NavigateAsync и передаем модель, которая затем может быть использована ViewModel для «заполнения себя». Проблема этого подхода состоит в том, что невозможно использовать свойства ViewModel для привязки в просмотре списка.

Например: У меня есть View, ViewModel и Model "PickList", который содержит коллекцию объектов "PickLine" - каждый из которых имеет сами View, ViewModel и Model. Объект PickLine содержит свойство «PickedQuantity» и свойство «OpenQuantity». Теперь в моем представлении PickList я не хочу связывать эти два элемента в отдельные элементы (например, две метки), но я хочу, чтобы одна метка отображала оба формата, например «PickedQuantity / OpenQuantity». Я знаю, что этот пример можно решить с помощью мульти-связывания или чего-то подобного Но это не смысл всего этого. Мой PickLine ViewModel уже имеет свойство «КоличествоСтроки», которое я хочу привязать к метке элемента списка через DataTemplate. Но как я могу это сделать. Это вообще возможно?

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Ваш PickListViewModel должен предоставить свойство коллекции, элементы которого имеют тип PickLineViewModel (, а не PickLine).

Необходимость ObservableCollection<PickLineViewModel> зависит от того, где могут произойти изменения - в сервисе / модели, в которой изначально были созданы PickLine s, или в графическом интерфейсе, или в обоих. В любом случае вы должны убедиться, что изменения распространяются с одной стороны (коллекция моделей представлений) на другую (коллекция моделей). Google wrapping observable collection как стартер (подсказка: по возможности избегайте двусторонней синхронизации). Эти сообщения в блоге старые, но все еще актуальны и хорошо читаются. Тривиальная упаковка описана в этом ответе .

0 голосов
/ 19 января 2019

Создайте свойство, которое сочетает в себе два других свойства и привязать к нему. E.g.:

открытая строка FullQuantity {get {return $ "{PickedQuantity} / {OpenQuantity}";}}

Затем в установщике для PickedQuantity и OpenQuantity вы захотите вызвать любой метод PropertyChanged, который вы установили, чтобы уведомить привязки об изменении свойства и передать имя свойства FullQuantity, чтобы элементы, которые привязаны к FullQuantity и обновляются при изменении либо PickedQuantity, либо OpenQuantity.

Таким образом, вы привязываете только текст одной метки к одному свойству, и эта метка будет обновляться при изменении любого из двух количественных свойств.

Примечание: я не знаком с Prism, но этот подход должен работать независимо от используемой среды Mvvm.

...