concatenate - Concatenar cadena con enlaces XAML
xamarin forms label concatenate (2)
¿Es posible tener algún texto estático y un contexto vinculable en la misma etiqueta?
<Label Text = "${Binding totalCost}"
x:Name = "totalCost"
HorizontalOptions = "Start"
VerticalOptions = "Start"
Grid.Row = "6" Grid.Column = "1"/>
Excepto que se muestra como "$ {Binding totalCost}"
Sé que podría simplemente configurar el campo haciendo algo como totalCost.Text = String.Format("${0}", totalCost);
pero solo quería ver si era posible a la inversa
Vea si esto funciona para usted:
Text="{Binding totalCost, StringFormat=''${0}''}"
Diferentes XAMLS pueden diferir, pero esperaría que StringFormat
en un Binding
funcione solo si la propiedad de destino del enlace es de tipo String
. En WPF, por ejemplo, funciona para TextBlock.Text
, pero no para Label.Content
, que es de tipo Object
. Por esa razón, a menudo falla en silencio, lo que puede ser muy irritante si no estás familiarizado con esa pequeña trampa explosiva.
Otra cosa útil que debe saber: ContentControl
y sus muchos descendientes ( Label
, etc.) tiene una propiedad ContentStringFormat
que coacciona Content
a una cadena y lo formatea. HeaderedItemsControl
(clase base de MenuItem
, etc.) y HeaderedContentControl
(clase base de GroupBox
etc.) tienen cada uno una propiedad HeaderStringFormat
que hace lo mismo para sus respectivas propiedades de Header
.
Aunque la respuesta seleccionada es correcta, ignorará las comas en los valores de su moneda o en el período potencial. Una mejor forma sería exponer una propiedad get que proporcione el valor apropiado para el enlace. A continuación se muestra un fragmento de código para cualquier persona en el futuro
<Label Text = "${Binding TotalCostFormatted}"
x:Name = "totalCost"
HorizontalOptions = "Start"
VerticalOptions = "Start"
Grid.Row = "6" Grid.Column = "1"/>
En su ViewModel
double totalCost;
public double TotalCost
{
get { return totalCost; }
set
{
totalCost = value;
OnPropertyChanged(nameof(TotalCostFormatted));
}
}
public string TotalCostFormatted
{
get { return TotalCost.ToString("C0"); }
}
Recuerde que siempre puede crear una propiedad get
en su ViewModel
que exponga algunos datos. Llame a OnPropertyChanged
o cualquiera que sea su método llamado que implemente su interfaz INotifyPropertyChanged
. Si quiere los centavos en su valor en dólares, cambie "C0" a solo "C".