Design patterns 为了绑定而破坏LSP可以吗?

Design patterns 为了绑定而破坏LSP可以吗?,design-patterns,data-binding,silverlight-4.0,mvvm,liskov-substitution-principle,Design Patterns,Data Binding,Silverlight 4.0,Mvvm,Liskov Substitution Principle,有些事告诉我,我问这个问题可能会被处以私刑。很抱歉之前的描述太冗长了 我正在做Silverlight 4项目中的一个角落案例。基本上,我正在构建的是一个自定义表单生成器 表单可能有几个不同类型的字段(文本、整数、电子邮件等)。现在,所有这些类型都扩展了字段类,但在文本字段中可能有额外的属性,如length 我可以在我的表单fieldsmanagementviewmodel中添加和删除字段视图模型集合中的字段。到目前为止,这些都是相当标准的东西 现在,。。。为了让用户针对字段对象设置属性,我有一个

有些事告诉我,我问这个问题可能会被处以私刑。很抱歉之前的描述太冗长了

我正在做Silverlight 4项目中的一个角落案例。基本上,我正在构建的是一个自定义表单生成器

表单可能有几个不同类型的字段(文本、整数、电子邮件等)。现在,所有这些类型都扩展了
字段
类,但在文本字段中可能有额外的属性,如length

我可以在我的
表单fieldsmanagementviewmodel
中添加和删除
字段视图模型集合中的字段。到目前为止,这些都是相当标准的东西

现在,。。。为了让用户针对字段对象设置属性,我有一个
UserControl
,它具有类型为
DataTemplate
的依赖属性,并表示在选择特定类型的字段时要显示的UI。因此,为了澄清,
UserControl
有一个
SingleLineTextTemplate
属性,当选择了
SingleLineTextFieldViewModel
时将显示该属性,但当选择了
EmailFieldViewModel
时,将显示
EmailFieldTemplate
SingleLineTextFieldViewModel
EmailFieldViewModel
都继承自
FieldViewModel

当我在每个模板中声明绑定时,就会出现问题。设置基类
FieldViewModel
的属性非常有效(IMHO),比如
IsRequired
Position
,但是我在
SingleLineTextTemplate
中还有与
SingleLineTextFieldViewModel
的长度属性相匹配的
Length
绑定。因此,我依赖于具体类的扩展接口,而不仅仅是
FieldViewModel

在我继续之前,我应该指出这是有效的。我不确定它是否会,现在确实如此,我不确定它是否应该……或者我是否应该这样做

我这样做只是为了绑定,没有绑定到动态对象和/或Silverlight中缺少
DataTemplateSelector

显然,
SingleLineTextFieldViewModel
在绑定场景中不可替代它的基类。我的问题是,因为我不是在代码中使用这些对象,而是在标记中使用它们,……这仍然被认为是不好的做法吗


提前非常感谢。

我不会有任何问题,我过去也做过同样或类似的事情


假设当
DataContext
SingleLineTextFieldViewModel
的实例时(可能是通过将
DataTemplate
映射到该类型),只使用
singlelinetextmplate
,则不会出现任何问题,由于绑定框架的弹性,即使您尝试将模板用于不合适的类型,也不会产生任何显著的负面影响。

谢谢。这也是我的感觉。这样违反LSP让我有点紧张。