texto concatenate concatenar xaml xamarin binding

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