在MVVM中从网格中选择Item后创建一个控件

时间:2011-11-16 15:53:27

标签: silverlight silverlight-4.0 mvvm-light

我在网格(telerik)中有一组项目,在我选择任何项目集合后(我知道如何注意更改所选项目)我需要在同一个用户控件中创建一个控件,它将显示选定项目的某些属性。

问题在于,根据所选项目的类型(集合类具有字段SomeType),我需要添加一个特定的类。

因此,例如,如果我有一个汽车的集合,我选择的汽车是suv,比我必须添加SuvControl,当我选择面包车,那么我将不得不添加VanControl。这些控件是不同的,因为具有不同的字段名称,并且会有不同的行为。

我正在使用MVVM Light。

我找不到任何好的例子,所以我甚至会奖励某个例子的链接。

2 个答案:

答案 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)时,如果要将它们全部放入并将它们的可见性绑定到项类型属性,那么一次只能看到一个模板。同样,这也不是推荐的技术,但在简单的情况下,它可以快速地为您带来所需的结果。