如何在WPF/XAML中体现类的继承关系?

4

首先声明一下:我有编程经验,但在XAML/WPF/StackOverflow方面还是个初学者。如果有任何“愚蠢”的地方,请谅解并请告诉我哪里没有描述清楚或需要额外的信息。谢谢。

简介: 我有一个基类Item,其中包含一些属性(例如TitleNotes等)。然后我有一些派生类,如ContactItemMediaItem等,它们具有附加属性,可以作为进一步专门化项目类型的基类(例如,ImageItemMusicItemVideoItem是从 MediaItem 派生的; PersonInstitution是从ContactItem派生的)。

在WPF中,我想要一个页面,可以将多种项目类型一起显示。目前我使用一个ItemsPanel来实现这一点,并为每种项目类型开始指定数据模板 - 而且有很多(超过50个)。

问题: 现在我想要的是一种项目控件的“继承”(例如,有一个“基本”UserControl,其中有一个ContentPresenter,并添加附加属性的其他控件/控件模板)。如何在WPF/XAML中处理这个问题,而不必在数据模板中为派生的项目类型复制/粘贴从基类中复制的控件?

如果您有任何想法或指引,请告诉我。如果需要一些代码或其他信息,请告诉我。


@Chris:感谢您编辑我的问题!我从中学到了东西。 - me.
1个回答

4

您可以简单地将每个基类UserControl嵌套在更多派生的UserControl内部,但是您可能会发现这很快会变得难以管理。另一种方法是使用ContentControl元素来显示其他DataTemplate中更大的部分像这样:

<DataTemplate x:Key="NameTemplate" DataType="{x:Type ViewModels:UserViewModel}">
    <TextBlock Text="{Binding Name}" />
</DataTemplate>
...
<DataTemplate DataType="{x:Type ViewModels:UserDerivedViewModel}">
    <ContentControl Content="{Binding}" 
        ContentTemplate="{StaticResource NameTemplate}" />
    <TextBlock Text="{Binding Age}" />
</DataTemplate>

谢谢Sheridan!你的示例帮了我很多。但在我的情况下,我不仅想要附加属性控件,还想能够在基类模板的属性控件之间“插入”它们。你的方法能实现这个吗? - me.
1
不,我浪费了很多时间在搜索这些东西上,当我第一次接触WPF时...它与其他语言非常不同,新开发人员总是错误地搜索与这些其他语言相关的WPF部分。WPF通常是冗长的语言...你会发现很多重复的代码和代码分散在各个地方,但即使你能做到想要的,你很快就会发现为每种数据类型定义一个(或多个)完整的“DataTemplate”只是更容易。 - Sheridan
非常感谢您帮我省了很多时间!我会接受您的方法作为答案,因为它可能适用于其他许多情况。 - me.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接