我需要将不同的用户控件显示为我的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映射到其他控件
答案 0 :(得分:0)
好的,除非我遗漏了一些东西,否则我认为你应该使用DataTemplateSelector
。对于要使用Name属性处理的每个案例,此选择器将返回一个DataTemplate
(包含您想要的用户控件)。您可以在此处或在网上找到有关DataTemplateSelector
的所有信息,但如果您有任何不可获得的信息,请随时提出。
答案 1 :(得分:0)
你已经采用了正确的方法。所有缺少的是App.xaml中的条目,如下所示:
<DataTemplate TargetType="{x:Type thetypeofyourviewmodel}">
<Typeofcontrolyouwanttouseforrendering />
</DataTemplate>
以这种方式结合使用ContentPresenter(您正在使用ContentControl)是动态呈现内容的常用方法。