Silverlight 4 DataTemplate DataType

Silverlight 4 отсутствует, и кажется, что мы пропустили функциональность DataTemplate DataType в этом выпуске снова, который является довольно основным для поддержки MVVM, по моему скромному мнению. Для моих приложений WPF, в этой точке, я довольно привык к глобальному добавлению DataTemplates для моих Представлений к моему Приложению. Ресурсы с DataTypes для моего соответствующего ViewModels:

т.е.

<DataTemplate DataType="{x:Type viewModels:myViewModel}">
<views:myView/>
</DataTemplate>

Мне нравится этот подход, так как все мои связанные ViewModels автоматически отображают корректное содержание... особенно полезное, когда у меня есть некоторый ItemSource, по моему мнению, связанный с набором ViewModels... Это, например, автоматически удостоверится каждая вкладка в TabControl, связанном с a Collection<SomeViewModel> отображает представление, связанное с SomeViewModel.

Некоторые вещи, которые я попробовал за SL 3, включают:

  • Создание "DataTemplatePresenterContentControl", который автоматически применяет DataTemplate для Содержания, когда управление загрузилось

  • Используя TypeConverter, примененный динамично на загрузку управления, спускаясь с визуального дерева, ища данные, связал объекты

  • Используя стиль, примененный динамично на загрузку управления, спускаясь с визуального дерева, ища данные, связал объекты

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

Так, так как это все еще не возможно из поля в Silverlight 4, я ценил бы, чтобы знать, придумал ли кто-либо все же некоторые разумные альтернативы.

Спасибо.

6
задан AnthonyWJones 6 July 2010 в 12:27
поделиться

1 ответ

В WPF и Silverlight для этого я использую Prism. Я считаю, что гораздо более универсальным является переключение представлений на основе типов. Чтобы его пристегнуть, требуется немного, но как только он вставлен, возможности безграничны.

Edit

Я делаю это, привязывая RegionName к свойству в моей ViewModel (может быть GetType (). Name, если хотите). Затем я регистрирую типы имен, и все работает.

В случае чего-то вроде ListBox я установил шаблон данных следующим образом:

<ContentControl Regions:RegionManager.RegionName="{Binding SomeName}" />

Если вы не хотите, чтобы SomeName было на объекте, к которому вы привязываетесь, рассмотрите ValueConverter который возвращает имя типа:

<ContentControl Regions:RegionManager.RegionName="{Binding SomeName, Converter={StaticResource ObjectToTypeConverter}}" />

Это поможет?

1
ответ дан 10 December 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: