2016-05-16 89 views
9

是否可以在同一個標​​籤中包含一些靜態文本和可綁定的上下文?使用綁定連接字符串XAML

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

除本顯示爲「$ {結合TOTALCOST}」

我知道我可以只輕鬆地做類似totalCost.Text = String.Format("${0}", totalCost);設定的領域,但只是想看看是否有可能其他方式

回答

24

看看這對你的作品:

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

不同XAMLS可能會有所不同,但我希望StringFormatBinding僅在綁定的目標屬性爲String時才起作用。例如,在WPF中,它適用於TextBlock.Text,但不適用於Label.Content,其類型爲Object。出於這個原因,它往往會默默地失敗,如果你不熟悉那個小笨蛋陷阱,這可能是非常令人頭痛的。

另一個方便的事情知道:ContentControl和它的許多後代(Label等)具有ContentStringFormat特性,它可以強制Content爲字符串,並將其格式化。 HeaderedItemsControl(基類MenuItem等)和HeaderedContentControl(基類GroupBox等)每個都有一個HeaderStringFormat property,它們各自的Header性能相同。

+0

謝謝!這確實對我有用。當我允許時,我會在5分鐘內接受你的回答。 – John

+2

@Shane好消息! –

3

雖然選定的答案是正確的,但您將忽略逗號在您的貨幣值或潛在期限內。更好的方法是公開一個爲綁定提供適當值的get屬性。下面是在未來

<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」。

0

我在想.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"/> 

乾杯。