根据对象属性选择不同的视图模型

时间:2016-11-02 10:33:36

标签: wpf datatemplate

我需要将不同的用户控件显示为我的viewmodel的详细视图 假设我有viewModel的列表

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

我需要显示“Name = Market” - > “TradeControl”,“Name = Academy” - >我的内容控件中的“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可视化不同的name属性值,它是关于使用自己的viewmodels和datacontexts映射到其他控件

2 个答案:

答案 0 :(得分:0)

好的,除非我遗漏了一些东西,否则我认为你应该使用DataTemplateSelector。对于要使用Name属性处理的每个案例,此选择器将返回一个DataTemplate(包含您想要的用户控件)。您可以在此处或在网上找到有关DataTemplateSelector的所有信息,但如果您有任何不可获得的信息,请随时提出。

答案 1 :(得分:0)

你已经采用了正确的方法。所有缺少的是App.xaml中的条目,如下所示:

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

以这种方式结合使用ContentPresenter(您正在使用ContentControl)是动态呈现内容的常用方法。