Tengo un modelo con una propiedad enum (en este caso, relacionado con las regulaciones de control de exportación). Cuando visualice el valor para el usuario, quiero mostrar una cadena correspondiente. Algunas veces esto está en ComboBox (donde el usuario puede seleccionar un valor), y algunas veces está en un TextBlock (donde es de solo lectura).Enlazar textblock con el valor del diccionario para la clave en XAML?
Ejemplo: para ExportRegulationType.EAR
, quiero mostrar "EAR"
, mientras que para ExportRegulationType.DoNotExport
, quiero mostrar "Do Not Export"
. Tenga en cuenta que no tengo ninguna necesidad de localización de idiomas, pero reconozco el problema ...
Actualmente, en mi ViewModel, tengo una propiedad que devuelve una cadena basada en el valor enum actual, y también otra propiedad que devuelve un Dictionary<ExportRegulationType, string>
. Para los ComboBoxes, puedo vincular ItemsSource
a la propiedad del diccionario, y para los TextBlocks, puedo enlazar a la propiedad de cadena. Esto funciona, pero es un poco torpe.
Dos preguntas:
1) Me parece que yo debería ser capaz de declarar el diccionario (con claves y valores) como un recurso estático en XAML (probablemente en App.xaml), y el uso que de el ItemsSource para la versión de ComboBox. Sin embargo, no puedo descifrar cómo declarar y referenciar tal cosa. ¿Cómo puedo hacer eso?
2) Suponiendo que lo anterior está en su lugar, creo que también podría configurar un enlace con el bloque de texto, por lo que en función de la propiedad enum, buscará la cadena en el diccionario.
He visto las siguientes preguntas relacionadas con un valor de enum static o dynamic. El primero no es adecuado, y el segundo no se responde ...
Estos deben ser solo XAML, y me permitirán eliminar los métodos de mi ViewModel (que tiene solo la propiedad enumerada ExportRegulationType
expuesta). son estos posibles
Editar: información adicional:.
En la aplicación, voy a tener muchos conjuntos diferentes de puntos de vista, modelos y ViewModels Sin embargo, como los reglamentos de control de exportaciones son un requisito común y consistente, Estoy usando la composición para mantenerla SECA, es decir, los Modelos A y B tienen ambos un modelo ExportControl. ViewModels A1, A2, B1 y B2 tendrán ve un ExportControlViewModel. Las vistas tendrán controles vinculados al ExportControlViewModel de su ViewModel. Las vistas tendrán un ComboBox o un TextBlock, pero no ambos (Dependiendo de si el usuario puede cambiar el valor).
Agregué C# como una etiqueta para que las respuestas obtuvieran resaltado de sintaxis –