tutorial ejemplos c# xaml windows-runtime winrt-xaml mvvm-light

c# - ejemplos - MĂșltiples formularios de entrada con el mismo archivo xaml y diferentes DataContexts



xaml tutorial (1)

Estoy desarrollando una aplicación WinRT usando XAML y MVVM Light. Esta aplicación está diseñada para facilitar la recopilación de datos mientras los usuarios están fuera del campo. Tengo una sección de mi aplicación en la que los usuarios deberán ingresar un montón de información sobre varios elementos diferentes. Estos elementos se definen como clases que heredan de una clase GenericAsset . El GenericAsset tiene campos como este:

public class GenericAsset { public string AssetId { get; set; } public string Name { get; set; } public string Description { get; set; } public string Make { get; set; } public string Model { get; set; } }

Y las subclases se ven más o menos así:

public class SubAsset1 : GenericAsset { public string RecordNumber { get; set; } public int SizeDiameter { get; set; } public string MaterialType { get; set; } } public class SubAsset2 : GenericAsset { public string Type { get; set; } public int Size { get; set; } public string PlanRef { get; set; } public string InteriorMaterial { get; set; } }

Actualmente tengo 15 SubAssets (y tendré muchos más en el futuro) y estoy buscando una forma de crear una vista de entrada de datos / modelo de vista (si es posible) para no tener que crear una vista separada para cada activo. Además, si puedo obtener el funcionamiento del view / view / view genérico, ¿cómo voy a cargar los controles de entrada de datos personalizados (las entradas específicas para cada sub activo) mientras mantengo el enlace de datos bidireccional correcto con el sub activo apropiado?


Lo que estás buscando es un DataTemplateSelector . Cree un DataTemplate diferente para cada SubAsset . A continuación, muestre el Asset través de ContentControl (o ListView en el caso de varios de ellos). Ambos tienen una ranura para un DataTemplateSelector ( ContentTemplateSelector y ItemTemplateSelector , respectivamente). Si hay partes que son similares entre ellos, puede componer un DataTemplate con otro utilizando un ContentControl interno que apunta al DataTemplate destino (que desea componer).

Para agregar sus DataTemplate desde diferentes ResourceDictionaries , cuando cree su DataTemplateSelector , cree una propiedad para cada DataTemplate que desee tener.

Tu selector puede verse más o menos así:

public class AssetDataTemplateSelector : DataTemplateSelector { public DataTemplate SubAsset1DataTemplate { get; set; } public DataTemplate SubAsset2DataTemplate { get; set; } ... // Data Template Selection Code ... }

Luego, en un ResourceDictionary (como Generic.xaml), cuando declaras AssetDataTemplateSelector , simplemente AssetDataTemplateSelector referencia a todas las otras DataTemplates como StaticResource s.

<!-- This assumes that AssetDataTemplateSelector has been declared in a namespace defined in the root of the ResourceDictionary as ''converters''. --> <!-- It also assumes that you have created DataTemplates with the names SubAssetXDataTemplate either in the same or other ResourceDictionaries which are accessible from this one. --> <converters:AssetDataTemplateSelector x:Key="AssetDataTemplateSelector" SubAsset1DataTemplate="{StaticResource SubAsset1DataTemplate}" SubAsset2DataTemplate="{StaticResource SubAsset2DataTemplate}" ... />