首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WPF:根据对应的ViewModels切换UserControls

WPF:根据对应的ViewModels切换UserControls
EN

Stack Overflow用户
提问于 2011-02-16 23:51:02
回答 1查看 15.4K关注 0票数 20

我将试着通过想象这个例子来简化我正在处理的任务:

假设我们有以下模型类的层次结构:

代码语言:javascript
复制
Animal
   Lion
   Snake
   Bird

...corresponding ViewModels:

代码语言:javascript
复制
AnimalCollectionViewModel
   AnimalViewModel
      LionViewModel
      SnakeViewModel
      BirdViewModel

..。和相应的视图:

代码语言:javascript
复制
AnimalCollectionView
   LionView
   SnakeView
   BirdView

假设AnimalCollection包含一个填充了不同类型动物的对象的列表,并且在该列表的下面有一个属性网格,用于设置所选动物的属性。显然,属性网格将具有不同的属性,并且应该在所选项目的类型发生变化时进行更改。

问题是:如何根据MVVM模式在WPF中实现属性网格的切换?使用什么机制?

目前,我在基本ViewModel (AnimalViewModel.PropertyGridType = {Lion,Snake,Bird})中有一个抽象枚举属性,派生类通过返回相应的值来实现该属性。AnimalCollectionView根据此属性的值更改属性网格用户控件。如下所示:

..。

代码语言:javascript
复制
<UserControl.Resources>
    <Style x:Key="PropertyGridStyle" TargetType="ContentControl">
        <Style.Triggers>
            <DataTrigger Binding="{Binding PropertyGridType}" Value="Lion">
                <Setter Property="Content">
                    <Setter.Value>
                        <view:LionPropertyGridView />
                    </Setter.Value>
                </Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding PropertyGridType}" Value="Snake">
                <Setter Property="Content">
                    <Setter.Value>
                        <view:SnakePropertyGridView />
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

<ContentControl Style="{StaticResource PropertyGridStyle}" />

..。

但我不确定这是不是正确的方法。(至少我不喜欢引入辅助枚举属性。是否可以根据ViewModel类型推导出必要的用户控件?)有没有人能给出其他的建议?提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2011-02-17 00:05:50

为此,您可以使用DataTemplateSelector。选择正确模板的方法由您决定。如果您愿意,可以对类类型使用枚举或测试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5018613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档