2016-11-02 3 views
0

мне нужно, чтобы показать различные UserControls как подробно зрения моих ViewModels Предположим, у меня есть список моих ViewModelsВыбор различных ViewModels на основе свойства объекта

class BuildingVM 
{ 
    String Name {get;set;} 
    ... 
} 

мне нужно, чтобы показать «Name = Market» -> «TradeControl », "Name = академия" -> "ScienceControl" и т.д. внутри моего контроля содержания

вид:

<Grid.ColumnDefinitions> 
     <ColumnDefinition Width="240"/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
     <ListView 
      Grid.Column=0    
      Background="Transparent" 
      Name="BuildingsList" 
      ItemsSource="{Binding Path=Buildings}" 
      ItemTemplate="{StaticResource lvBuildingListItem}" 
      SelectedItem="{Binding Path=SelectedBuilding}" 
      /> 
    </DockPanel> 

    <ContentControl 
     Grid.Column="1" 
     Content="{Binding Path=SelectedBuilding}"/> 

</Grid> 

это не об использовании разных шаблонов для визуализации BuildingVM для разных значений свойства имени, его сопоставления с другими элементами управления с их собственными режимами просмотра и datacontexts

+0

Является ли список элементов управления фиксированным списком или это то, где вы могли бы регистрировать новые элементы управления? –

+0

Это должно быть предопределено, я полагаю. –

+0

hi andrey - взгляните на мое предложение. если это не то, что вы ищете, мы можем поговорить и разобраться, если вы хотите :) – Dbl

ответ

0

Хорошо, если только что-то я пропустил, я думаю, вы должны использовать DataTemplateSelector. Этот селектор вернет один DataTemplate (содержащий требуемый пользовательский контроль) для каждого случая, с которым вы хотите обращаться с свойством Name. Вы найдете всю информацию о DataTemplateSelector здесь или в Интернете, но если есть что-то, чего вы не получите, не стесняйтесь спрашивать.

0

С этим вы идем правильным путем. Все, что не хватает является запись в вашем App.xaml так:

<DataTemplate TargetType="{x:Type thetypeofyourviewmodel}"> 
    <Typeofcontrolyouwanttouseforrendering /> 
</DataTemplate> 

Действовать таким образом в сочетании с ContentPresenter (Вы используете ContentControl) является распространенным способом для динамического отображения контента.

Смежные вопросы