Tengo un modelo de vista con una propiedad Fields
que es ObservableCollection<FieldVM>
. En la vista que utiliza esta propiedad, tengo una ItemsControl
así:Alternativa DataTemplate.DataType en Silverlight
...
<ItemsControl ItemsSource="{Binding Fields}" />
...
FieldVM
es una clase abstracta, implementado por tales clases como TextFieldVM
y EnumFieldVM
. Durante el tiempo de ejecución, estas FieldVM
-implementaciones se agregan a la propiedad Fields
y quiero que aparezcan en mi vista con sus vistas asociadas.
En WPF, hacer esto es simple, lo hago todo el tiempo. Usted acaba de hacer esto en un diccionario de recursos apropiados, y todo funciona como se espera:
<DataTemplate DataType="{x:Type vm:TextFieldVM}">
<v:TextFieldView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:EnumFieldVM}">
<v:EnumFieldView />
</DataTemplate>
Ahora, trabajando en Silverlight, por primera vez, esperaba que yo podría hacer lo mismo, pero el DataTemplate
no tienen una propiedad DataType
. Estoy perplejo. ¿Cuál es la forma de Silverlight de hacer esto?
Gracias por su sugerencia. Funciona, y lo estoy marcando como la respuesta, pero en realidad no es una solución ideal ... es más un hack feo. No puedo evitar sentir que tiene que haber una forma más adecuada de hacerlo, como la WPF. – Alex
Agregué una opción adicional que podría ser un poco más bonita: –
@Alex: me doy cuenta de que llegué un año tarde al juego aquí, pero implementé un comportamiento adjunto 'BooleanVisibility' que podría resultarle interesante. Puede encontrar la reseña aquí: http://www.executableintent.com/attached-behaviors-part-1-booleanvisibility/. La Parte 2 de la serie tiene un ejemplo de código con un marco de comportamiento adjunto y la implementación 'BooleanVisibility'. –