是否可以在同一标签中包含一些静态文本和可绑定上下文?
<Label Text = "${Binding totalCost}"
x:Name = "totalCost"
HorizontalOptions = "Start"
VerticalOptions = "Start"
Grid.Row = "6" Grid.Column = "1"/>
除非显示为“$ {Binding totalCost}”
我知道我可以通过做totalCost.Text = String.Format("${0}", totalCost);
这样的事情来轻松设置字段,但只是想看看是否可能反过来
答案 0 :(得分:29)
看看这是否适合你:
Text="{Binding totalCost, StringFormat='${0}'}"
不同的XAMLS可能会有所不同,但我希望StringFormat
中的Binding
仅在绑定的目标属性类型为String
时才有效。例如,在WPF中,它适用于TextBlock.Text
,但不适用于类型为Label.Content
的{{1}}。出于这个原因,它经常会无声地失败,如果你不熟悉这个小小的诱杀陷阱,这可能会非常令人烦恼。
另一个值得注意的事情:Object
及其众多后代(ContentControl
等)具有Label
属性,可将ContentStringFormat
强制转换为字符串并对其进行格式化。 Content
(基类HeaderedItemsControl
等)和HeaderedContentControl
(基类MenuItem
等)每个都有一个HeaderStringFormat
property,它们各自的作用相同GroupBox
属性。
答案 1 :(得分:6)
对于标签,还有其他功能:ContentStringFormat,例如以下示例:
<Label Content="{Binding Tag, FallbackValue=Custom}" ContentStringFormat="Length: {0}" DataContext="{Binding ElementName=cbRebarLength, Path=SelectedItem}"/>
答案 2 :(得分:3)
虽然所选答案是正确的,但您将忽略货币值或潜在期间的逗号。更好的方法是公开为绑定提供适当值的get属性。以下是未来任何人的代码段
crsp.PERMNO
在您的ViewModel
中<Label Text = "${Binding TotalCostFormatted}"
x:Name = "totalCost"
HorizontalOptions = "Start"
VerticalOptions = "Start"
Grid.Row = "6" Grid.Column = "1"/>
请记住,您始终可以在double totalCost;
public double TotalCost
{
get { return totalCost; }
set
{
totalCost = value;
OnPropertyChanged(nameof(TotalCostFormatted));
}
}
public string TotalCostFormatted
{
get { return TotalCost.ToString("C0"); }
}
中创建一个公开某些数据的get
属性。调用ViewModel
或调用实现OnPropertyChanged
接口的方法。如果你想要美元价值的分数,改变&#34; C0&#34;只是&#34; C&#34;。
答案 3 :(得分:1)
我认为.NET做你想做的事情,即格式值字符串作为货币,正在使用绑定属性StringFormat
和Currency Format Specifier:
Text="{Binding totalCost, StringFormat=\{0:C\}}"
您的代码看起来像这样
<Label Text="{Binding totalCost, StringFormat=\{0:C\}}"
x:Name = "totalCost"
HorizontalOptions = "Start"
VerticalOptions = "Start"
Grid.Row = "6"
Grid.Column = "1"/>
干杯。