【问题标题】:Silverlight Best Practice for modular UserControls / Inheritance模块化用户控件/继承的 Silverlight 最佳实践
【发布时间】:2010-09-23 20:55:19
【问题描述】:


我有点卡在 Silverlight 中 UI 设计的不同方法,以及可重用性方面。假设以下简单示例:

一个基类ORGANISM有一个NAME + AGE

子类 DOG 有一个 FURCOLOR
子类 HUMAN 有一个 JOB

现在我有一个包含 30 个有机体的列表,一些是狗,一些是人类。
我可以使用 listBox 来显示所有项目(类名)。

我想为 ORGANISM 创建一个“基本外观”(例如,顶部的名称)
如果数据对象是一只狗,我还想列出它的毛色。
如果是人类,我也想列出它的工作描述。

我已经尝试过 DataTemplates、UserControls 和其他东西,但我似乎被卡住了。 Silverlight 中没有 TargetType(或者我遗漏了什么),这个简单的示例似乎非常复杂。样式仅适用于视觉元素,不确定它们是否可以相互依赖。但也感觉不对劲……

我的真实例子更复杂,但你明白了。基类有一些我想要呈现的属性,而子类有更多我想要“添加”而不复制 XAMl 的属性。

任何正确方向的提示或提示?

克里斯

[编辑]澄清一下,我遇到的问题不仅限于列表。 另一种情况是细节视图,显示狗或人。 大多数细节视图是相同的,因此我可以使用带有红色边框的 UserControl 来呈现具有绑定到 Name 的 TextBlock 的 Organism。现在在这个文本块下方(但仍在 UserControl 内)应该有一个作业或一个毛色块。

ORGANISM 的用户控件
=================花式边框====================
姓名:霍斯特
=================花式边框====================

基于人类的用户控制
=================花式边框====================
姓名:霍斯特
工作:软件设计师
=================花式边框====================

基于狗的用户控件
=================花式边框====================
姓名:霍斯特
毛皮颜色:棕色
=================花式边框====================

在“父控件”中使用上述所有内容并根据类型使用可见性设置只是感觉不对,想象一下 Human 的 100 个属性,然后所有这些都将被隐藏但存在于狗控件中。

【问题讨论】:

    标签: silverlight


    【解决方案1】:

    有趣的问题。鉴于行为良好的数据对象不应该知道它们是如何显示的,您基本上希望每个项目的呈现项目模板根据每个项目的数据或属性(如类型)的某些解释而有所不同。

    按项目模板绑定?

    如果您可以在项目模板的源上使用项目绑定,那么客户转换器将根据内置的规则决定要显示的模板(充当一种控制器在 MVC 模型中)。

    不幸的是,列表控件中每个项目模板上的绑定被评估为列表属性一次,而不是每个项目。这意味着需要一种新型的列表控件来解决您的问题。一种允许将项目模板的选择绑定到单个项目的属性。我不知道这是否实用,但听起来可行。

    希望这对创意部门有所帮助。当然让我深思熟虑,因为我很快就有类似的问题要解决。

    【讨论】:

    • 我读了五遍,仍然没有真正得到你的答案 :-) 第一段正是我想要的。我尝试脱离列表示例,阅读上面的补充内容(5 分钟后 :-)
    • 哦,加上我的补充,我不确定如何告诉列表使用基于类型的 UserControl。我想那是你的意思的实际答案部分,但我仍然没有真正得到。但是这里已经很晚了,也许明天我会想得更清楚......
    • @Christian:如果它可以工作,这意味着您需要创建一个自定义控件,而不是用户控件,并使用相关的 generic.xml 模板完成。控件需要评估每个项目的绑定以获取它的模板。我什至不知道这是否可能,只是把想法扔在那里。就个人而言,我现在会采取简单的方法:假设 controller 大脑位于列表框中每个项目使用的用户控件中。该用户控件根据特定的数据类型以不同的方式显示其内容。我认为您已经尝试过该选项。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多