模块化UserControls /继承的Silverlight最佳实践

时间:2010-09-23 20:55:20

标签: silverlight


我有点陷入Silverlight的UI设计的不同方法,结合可重用性的方面。假设以下简单示例:

基类 ORGANISM 具有NAME + AGE

儿童班 DOG 有FURCOLOR
子类 HUMAN 有一个JOB

现在我列出了30个ORGANISM,一些狗,一些人 我可以使用listBox来显示所有项目(类名)。

我想为ORGANISM 创建一个“基本外观”(例如TOP上的名字)
如果数据对象是DOG,我还想列出它的颜色 如果是人,我也想列出其工作描述。

我已经尝试过DataTemplates,UserControls和其他东西,但我似乎陷入困境。 Silverlight中没有TargetType(或者我错过了一些东西),这个简单的例子看起来非常奇怪。样式仅适用于视觉元素,不确定它们是否可以相互依赖。但它也感觉不对......

我真实的例子比较复杂,但你明白了。基类有一些我要渲染的属性,子类有一些我希望“添加”而不复制XAMl。

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

克里斯

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

ORGANISM的UserControl
=================花式边框===================
姓名:Horst
=================花式边框===================

基于UserControl for HUMAN
=================花式边框===================
姓名:Horst
职位:软件设计师
=================花式边框===================

基于狗的UserControl
=================花式边框===================
姓名:Horst
FurColor:棕色
=================花式边框===================

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

1 个答案:

答案 0 :(得分:0)

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

每项模板绑定?

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

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

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