Создать элемент управления после выбора элемента из сетки в MVVM - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть коллекция элементов в сетке (телерика), и после того, как я выберу любой элемент коллекции элементов (я знаю, как заметить изменение выбранного элемента), мне нужно создать элемент управления в том же пользовательском элементе управления, который будет отображатьнекоторые свойства выбранного элемента.

Проблема заключается в том, что в зависимости от того, какой тип (у класса коллекции есть поле SomeType) выбранного элемента, мне нужно добавить определенный класс.

Итакнапример, если бы у меня была коллекция автомобилей, и я выбрал автомобиль с внедорожником, то мне пришлось бы добавить SuvControl, а когда я выбрал фургон, мне пришлось бы добавить VanControl.Эти элементы управления отличаются, потому что имеют разные имена полей и будут иметь различное поведение.

Я использую MVVM Light.

Я не смог найти хорошего примера, поэтому буду вознагражден даже зассылка на какой-то пример.

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Я бы связал свойство SelectedItem [ListBox с моделью представления

SelectedItem={Binding SelectedItem, Mode=TwoWay}

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

В подробном представлении будет использоваться DataTemplateSelector , и вы отобразите свое подробное представление следующим образом:

<Grid
    x:Name="DetailsGrid">
    <prismvm:DataTemplateSelector
        Content={Binding SelectedItem}>
        <prismvm:DataTemplateSelector.Resources>
            <DataTemplate
                x:Key="Type1ViewModel">
                <views:Type1View/>
            </DataTemplate>
            <DataTemplate
                x:Key="Type2ViewModel">
                <views:Type2View/>
            </DataTemplate>
        </prismvm:DataTemplateSelector.Resources>
    </prismvm:DataTemplateSelector>
</Grid>
1 голос
/ 17 ноября 2011

Как и предполагалось, DataTemplateSelector - это правильный путь в большинстве случаев и, безусловно, самый чистый.

Альтернатива, когда у вас мало разных шаблонов (2 или 3), если поместить их все и связатьих видимость для свойства типа элемента, так что только один виден одновременно.Опять же, это не рекомендуемый метод, но в простых случаях он может быстро привести к желаемому результату.

...