使用绑定XAML连接字符串

时间:2016-05-16 18:11:42

标签: xaml xamarin binding

是否可以在同一标签中包含一些静态文本和可绑定上下文?

<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);这样的事情来轻松设置字段,但只是想看看是否可能反过来

4 个答案:

答案 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做你想做的事情,即格式值字符串作为货币,正在使用绑定属性StringFormatCurrency 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"/>

干杯。