Caliburn Micro - автоматическое создание объектов ViewModel из привязки ItemSource классов Model?

Возможно ли в Caliburn Micro внедрить объект ViewModel между представлением и моделью при привязке к коллекции объектов модели?

Например, если бы у меня был IShellViewModel со следующим свойством:

IEnumerable<Foo> Foos { get; set; }

и ListBox в ShellView.xaml

<ListBox x:Name="Foos"/>

Который будет использовать FooView для отображения элементов списка. Может ли Caliburn внедрить коллекцию IEnumerable для привязки представления? Или мне нужно создать параллельную коллекцию IEnumerable рядом с IEnumerable исходной модели.


person Joe Wood    schedule 11.07.2011    source источник


Ответы (1)


Я не совсем уверен, что вы спрашиваете, когда вы говорите «который будет использовать FooView для отображения элементов списка», вы имеете в виду, что у вас есть 1 представление, которое отображает ВСЕ элементы, или представление для каждого элемента?

Если это последнее, то Caliburn.Micro имеет соглашение, согласно которому, если у вас есть набор моделей представлений (например, IEnumerable<FooViewModel>), привязанных к ItemsControl, то он будет искать FooView для каждого из элементов и автоматически привязывать обнаруженное представление к этому. модель представления элемента.

Если вы спрашиваете, может ли Caliburn.Micro автоматически генерировать типы ViewModel из ваших типов моделей, то нет. Как он узнает, какие свойства выставлять? Обычно модель представления изменяет и расширяет функциональные возможности модели, включая логику представления, специфичную для конкретной технологии пользовательского интерфейса.

person devdigital    schedule 11.07.2011
comment
Да, последнее. Коллекция FooViewModel отлично работает. Мой вопрос заключается в том, что Caliburn делает для вас, если вместо этого у вас есть динамическая коллекция IEnumerable‹Foo›. Будет ли Caliburn создавать соответствующий объект FooViewModel для связи с объектами модели? - person Joe Wood; 11.07.2011
comment
Как упоминалось в последней части ответа, это было бы невозможно и в любом случае нежелательно. Почему вы после этого функционала? - person devdigital; 11.07.2011
comment
Чтобы не создавать отслеживающую коллекцию ViewModels. В противном случае для каждой динамической коллекции в модели мне нужно было бы создать параллельную коллекцию объектов View-model (отслеживая исходную коллекцию модели с помощью INCC). Ничего страшного, но было бы лучше, если бы Caliburn создавал объекты ViewModel для переноса объектов модели по требованию. - person Joe Wood; 11.07.2011
comment
Это было бы полезно, мы сами думали о чем-то подобном, используя дженерики и типы модели и модели представления в качестве универсальных параметров, но это было не более чем первоначальные разговоры. Как я уже сказал, я не думаю, что вы захотите автоматически генерировать типы моделей представления, но вы, безусловно, можете написать шаблонный код для управления коллекциями в общем виде. - person devdigital; 11.07.2011
comment
Правильно, я написал универсальную коллекцию отслеживания ViewModel, используя универсальные параметры. Это работает нормально. Но я бы предпочел, чтобы Caliburn использовал модель, в которой ViewModel перерабатываются и присоединяются к объектам модели, когда это необходимо. Это очень похоже на работу Silverlight/WPF с виртуализацией элементов при привязке данных. - person Joe Wood; 11.07.2011