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".