将绑定的字符串连接起来 XAML

20

在同一个标签中同时拥有静态文本和可绑定的上下文,这是否可能?

<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); 的方式轻松设置字段,但只是想看看是否有其他方法可行。


这个回答解决了你的问题吗?使用字符串连接而不是 TextBlocks 堆栈 - StayOnTarget
4个回答

44

看看这是否对你有用:

Text="{Binding totalCost, StringFormat=${0}}"

1
谢谢!那确实对我有用。当它允许我这样做时,我将在5分钟内接受您的答案。 - John
这太棒了。在 WPF 核心中工作也很好。 - Sunny

10
<Label Content="{Binding Tag, FallbackValue=Custom}" ContentStringFormat="Length: {0}" DataContext="{Binding ElementName=cbRebarLength, Path=SelectedItem}"/>

4

虽然所选答案是正确的,但您将忽略货币值中的逗号或潜在的句号。一个更好的方法是暴露一个获取属性来为绑定提供合适的值。以下是一个代码片段,供将来有需要的人使用

<Label Text = "${Binding TotalCostFormatted}"
      x:Name = "totalCost"
      HorizontalOptions = "Start"
      VerticalOptions = "Start"
      Grid.Row = "6" Grid.Column = "1"/>

在你的ViewModel中

double totalCost;
public double TotalCost 
{
    get { return totalCost; }
    set 
    {
        totalCost = value;
        OnPropertyChanged(nameof(TotalCostFormatted));
    }
}
public string TotalCostFormatted
{
    get { return TotalCost.ToString("C0"); } 
}

记住,您可以在ViewModel中创建一个get属性,以公开一些数据。调用OnPropertyChanged或者实现了INotifyPropertyChanged接口的其他方法。如果您想要美分的美元价值,请将“C0”更改为“C”。


3

我认为你想要的 .NET 方法是将值字符串格式化为货币,可以使用绑定属性 StringFormat货币格式说明符

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

干杯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接