MVVM ViewModel выставляет несколько представлений одной коллекции - PullRequest
1 голос
/ 04 августа 2011

Я откусываю большой кусок здесь, пытаясь выучить MVVM, Unity и Prism одновременно (ack!).Пока все прошло достаточно хорошо, но я время от времени сталкиваюсь с камнем преткновения.Один из них такой:

У меня есть виртуальная машина, которая определяет экран детализации мастера.В разделе подробностей я хочу разделить строки подробностей по нескольким сеткам данных на элементе управления вкладками.Каждый DataGrid содержит отдельное подмножество строк подробностей, основанное на значении свойства в строке («Раздел»).По сути, я прочитал мою основную сущность, которая содержит коллекцию подробных сущностей.И я думаю, что мне нужно предоставить различные представления этой коллекции представлению, чтобы каждый из DataGrids мог связываться с соответствующим отфильтрованным подмножеством сбора данных.Сетки данных должны быть доступны для редактирования.Я сделал несколько попыток выставить различные уровни CollectionViews как ItemsSources для DataGrids, но, похоже, ничего не работает должным образом.Кроме того, я думаю, что, вероятно, было бы лучше выделить DataGrids в общий вид, поскольку все они отображают одну и ту же информацию (только по разным поднаборам деталей), но я не уверен, как это сделать.Кто-нибудь может помочь?

Спасибо, Деннис

1 Ответ

0 голосов
/ 04 августа 2011

Если я вас правильно понимаю, у вас есть что-то вроде этого:

public class MasterClass
{
    public List<object> Details;
}

Где Details - это Список, который содержит много разных типов объектов, и вы хотите отобразить разные View (DataGrid) для каждого типа объектов?

Я бы использовал TabControl с его ItemsSource, связанным со свойством Details, а затем использовал бы DataTrigger в TabItem, чтобы определить, как должен отображаться ItemTemplate (содержимое вкладки).

Что-то вроде этого:

<TabControl ItemsSource="{Binding Details}">
    <TabControl.Resources>
        <Style TargetType="{x:Type TabItem}">
            <Setter Property="Template" Value="{StaticResource DefaultTemplate}" />
            <Style.Triggers>
                <DataTrigger Property="{Binding ItemType}" Value="Address">
                    <Setter Property="Template" Value="{StaticResource AddressTemplate}" />
                </DataTrigger>
                <DataTrigger Property="{Binding ItemType}" Value="Phone">
                    <Setter Property="Template" Value="{StaticResource PhoneTemplate}" />
                </DataTrigger>
        </Style>
    </TabControl.Resources>
</TabControl>

Это всего лишь грубый пример, который может изменить шаблон TabItem на основе того, является ли Detail.ItemType «Адрес» или «Телефон». Я также делал это в прошлом с помощью конвертера, который проверяет тип объекта вместо необходимости иметь свойство Type для объекта, что работает еще лучше.

Если вам интересно, я написал небольшую статью здесь , в которой показано несколько способов переключения Views или UserControls на основе данных ViewModel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...