我在网格(telerik)中有一组项目,在我选择任何项目集合后(我知道如何注意更改所选项目)我需要在同一个用户控件中创建一个控件,它将显示选定项目的某些属性。
问题在于,根据所选项目的类型(集合类具有字段SomeType),我需要添加一个特定的类。
因此,例如,如果我有一个汽车的集合,我选择的汽车是suv,比我必须添加SuvControl,当我选择面包车,那么我将不得不添加VanControl。这些控件是不同的,因为具有不同的字段名称,并且会有不同的行为。
我正在使用MVVM Light。
我找不到任何好的例子,所以我甚至会奖励某个例子的链接。
答案 0 :(得分:2)
我会做的是将ListBox的SelectedItem [属性绑定到视图模型
SelectedItem={Binding SelectedItem, Mode=TwoWay}
或者您也可以进行ElementName绑定 - 所有这些都可以进入详细信息视图的viewmodel。
详细信息视图将使用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 :(得分:1)
正如所建议的那样DataTemplateSelector
在大多数情况下是正确的方式,当然也是最干净的。
当你有几个不同的模板(2或3)时,如果要将它们全部放入并将它们的可见性绑定到项类型属性,那么一次只能看到一个模板。同样,这也不是推荐的技术,但在简单的情况下,它可以快速地为您带来所需的结果。