2016-05-16 3 views
9

静的テキストとバインディング可能なコンテキストを同じラベルに含めることはできますか?私はちょうど簡単totalCost.Text = String.Format("${0}", totalCost);ような何かをすることによって、フィールドを設定するが、それは他の方法バインディングと文字列を連結するXAML

可能であったかどうかを確認したかった可能性が知っている、これは「{にtotalCostをバインド} $」として表示し

除き

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

答えて

24

これはあなたのために働くかどうかを確認してください:

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

異なるXAMLSは異なる場合がありますが、私はBindingStringFormatを期待しますバインディングのターゲットプロパティがタイプStringの場合にのみ機能します。 WPFでは、たとえばTextBlock.Textで動作しますが、Label.Contentでは動作しません。Objectです。その理由から、それは頻繁に黙って失敗します。あなたがその小さなブービートラップに慣れていないと、非常に困惑することがあります。知って

別の便利なもの:ContentControlとその多くの子孫(Label、など)は、文字列とフォーマットにContentを強制ContentStringFormat性質を持っています。 HeaderedItemsControl(基本クラスMenuItemなど)およびHeaderedContentControl(基本クラスGroupBoxなど)は、それぞれHeaderStringFormat propertyを持ち、これはそれぞれのプロパティで同じです。

+0

ありがとうございました!それは実際に私のために働いた。私は5分であなたの答えを受け入れてくれます。 – John

+2

@Shane良いニュース! –

3

選択した回答は正しいものの、通貨の値または潜在的な期間のカンマは無視されます。より良い方法は、バインディングに適切な値を提供するgetプロパティを公開することです。以下は

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

あなたはいつもちょうどいくつかのデータを公開し、あなたのViewModelgetプロパティを作成することができます忘れないでください、あなたのViewModelには将来

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

に誰のためのコードスニペットです。 OnPropertyChangedまたはINotifyPropertyChangedインターフェイスを実装しているメソッドが呼び出されたものを呼び出します。セントをドル価値にしたい場合は、 "C0"を "C"に変更してください。

0

私はあなたが望むことを行う.NETの方法を考えています。これは通貨としての値の文字列のフォーマットです。

Currency Format Specifierとともに結合性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"/> 

乾杯のようになります。