我正在研究Silverlight 4项目中的一个角落案例。基本上我正在构建的是一个自定义表单构建器。
表单可能包含多个不同类型的字段(文本,整数,电子邮件等...)。现在,所有这些类型都扩展了Field
类,但在文本字段的情况下可能还有其他属性,如length。
我可以在FieldViewModels
中添加和删除FormFieldsManagementViewModel
集合中的字段。所以到目前为止它都是非常标准的东西。
现在,...为了让用户针对Field对象设置属性,我有一个UserControl
,它具有DataTemplate
类型的依赖属性,并且代表我想要在选择特定类型的字段。因此,为了澄清,UserControl
有一个SingleLineTextTemplate
属性,当选择SingleLineTextFieldViewModel
时会显示但是当EmailFieldViewModel
被选中时,EmailFieldTemplate
是所示。 SingleLineTextFieldViewModel
和EmailFieldViewModel
都继承自FieldViewModel
。
当我在每个模板中声明绑定时,我的问题就出现了。设置基类FieldViewModel
的属性非常有效(恕我直言),例如IsRequired
和Position
,但我也在Length
中匹配SingleLineTextTemplate
的绑定SingleLineTextFieldViewModel
的Length属性。所以我依赖于具体类的扩展接口,而不仅仅是FieldViewModel
类。
我应该指出,在我继续这项工作之前。我不确定会不会,现在确实如此,我不确定它应该......或者我甚至应该这样做。
我只是为了绑定而没有绑定到动态对象和/或Silverlight中缺少DataTemplateSelector
而这样做。
显然,SingleLineTextFieldViewModel
在绑定方案中不能替代它的基类。我的问题是,因为我并没有真正在代码中使用这些对象,而是在标记中,...这仍然被认为是不好的做法吗?
提前多多感谢。
答案 0 :(得分:1)
我对此没有任何问题 - 我过去做过相同或类似的事情。
假设当SingleLineTextTemplate
是DataContext
的实例(可能是通过将SingleLineTextFieldViewModel
映射到该类型)时,您只使用DataTemplate
,那么从来没有任何问题,并且由于绑定框架的弹性,即使您尝试将模板用于不合适的类型,也不会产生任何明显的负面影响。