Solución:
Vea si esto funciona para usted:
Text="{Binding totalCost, StringFormat="${0}"}"
Diferentes XAMLS pueden diferir, pero yo esperaría StringFormat
en un Binding
para trabajar 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
(ver también). Por esa razón, a menudo falla en silencio, lo que puede ser muy molesto si no está familiarizado con esa pequeña trampa explosiva.
Otra cosa útil para saber: ContentControl
y sus muchos descendientes (Label
, etc.) tiene un ContentStringFormat
propiedad que coacciona Content
a una cadena y la formatea. HeaderedItemsControl
(clase base de MenuItem
, etc.) y HeaderedContentControl
(clase base de GroupBox
etc.) cada uno tiene un HeaderStringFormat
propiedad que hace lo mismo para sus respectivos Header
propiedades.
Para las etiquetas hay una característica adicional: ContentStringFormat, ejemplo a continuación:
<Label Content="{Binding Tag, FallbackValue=Custom}" ContentStringFormat="Length: {0}" DataContext="{Binding ElementName=cbRebarLength, Path=SelectedItem}"/>
Aunque la respuesta seleccionada es correcta, ignorará las comas en los valores de su moneda o el período potencial. Una mejor manera 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 un get
propiedad en tu ViewModel
que expone algunos datos. Llama OnPropertyChanged
o como se llame su método que implemente su INotifyPropertyChanged
interfaz. Si quiere los centavos de su valor en dólares, cambie “C0” a solo “C”.