2011-07-22 11 views
9

Tengo una cadena constante que debo volver a utilizar en varios diseños de XAML diferentes, así que en lugar de duplicarla, me gustaría vincularla a una constante.Configuración del texto de la etiqueta en XAML en la constante de cadena

tengo una clase que define la cadena en C#:

public static class StringConstants 
{ 
    public static string MyString { get { return "SomeConstant"; } } 
} 

Me gustaría ser capaz de establecer el valor a través de XAML a través de algo como lo siguiente:

<Label Content="{Binding local:StringConstants.MyString}"/> 

¿Este ¿realizable? He buscado ejemplos, pero solo he encontrado ejemplos que implican algunos retoques en el código subyacente y me pregunto si existe una solución más simple, solo para XAML, si sé que solo necesito establecer el valor una vez basado. en un valor de cadena que nunca cambiará.

Respuesta

19

va a enlazar a un miembro estático por lo que debe utilizar x:Static Markup Extension:

<Label Content="{Binding Source={x:Static local:StringConstants.MyString}}"/> 

Según comentario de @ HB no es necesario utilizar el enlace por lo que es más fácil de usar:

<Label Content="{x:Static local:StringConstants.MyString}"/> 
+1

¿Por qué se usaría un enlace de todos modos? Ciertamente no lo haría ... –

+0

@ H.B. ¿Qué recomiendas en su lugar? – mtlynch

+3

@ nonsensical101: simplemente lo dejo afuera: 'Content =" {x: Static local: StringConstants.MyString} "' –

0

Coloque la cadena estática pública MiCadena en su App.xaml.cs. Luego puede referenciarlo de la siguiente manera.

Content="{Binding Source={x:Static Application.Current}, Path=MyString}" 
-1

En el caso de que usted tiene una constante dentro de una clase no estático, esto no funciona.

Mi solución para vincular a una constante dentro de un modelo de vista (MVVM). Utiliza una propiedad getter con menos código para envolver.

// view model 
public const string MyString = "abc"; 
public string MyStringConst => MyString; 

.

<!-- WPF -->  
<Label Content="{Binding MyStringConst, FallbackValue='abc'}" /> 

FallbackValue se utiliza para la vista previa del Diseñador.

Cuestiones relacionadas