データグリッドのセル/列にバインドされている通貨値を書式設定したいとします。XAMLでの文化認識ATMの書式設定
次のように関連するXAMLである:
<telerik:RadGridView Grid.Row="0" Grid.ColumnSpan="2" x:Name="dataGrid"
AutoGenerateColumns="False" HorizontalAlignment="Stretch"
VerticalAlignment="Top" Margin="0,25,0,0" IsSearchingDeferred="True"
IsReadOnly="True" IsLocalizationLanguageRespected="False">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Path=VALUATION, StringFormat=C}"
Header="{x:Static properties:Resources.AddressLine3}"/>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
これは現在カラム(値は数値リテラルとしてデータベースから来ている)に結合されている値である。
12345678.90
カルチャーをen-US
に設定したときに出力される値です。
12345678.90 //notice the decimal point
T彼は文化がnl-NL
12345678,90 //notice the comma
に設定されているときに出力されますが、文化はある程度尊重されていることがわかります値です。しかし、出力は私が期待するものではありません。
en-US
の培養については、出力を$12,345,678.90
としたいと思います。 nl-NL
カルチャーについては、出力を€ 12.345.680,00
としたいと思います。なぜフォーマット通貨記号と番号を示している
public MainWindow()
{
//I am toggling between the following cultures
CultureInfo ci = new CultureInfo("nl-NL");
//CultureInfo ci = new CultureInfo("ja-JP");
//CultureInfo ci = new CultureInfo("en-US");
//I am forcing the UI to use the culture I specify
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
this.Language = XmlLanguage.GetLanguage(ci.Name);
Properties.Resources.Culture = ci;
//these are used to test that to string formatting works as expected
//when using the debugger
float price = 12345678.90F;
string currencyToDisplay = price.ToString("C");
InitializeComponent();
}
質問
:後ろに手動で次のコードを使用して(テスト目的のために)培養物を設定したの私のXAMLコードで
形式を通貨として指定したにもかかわらず、区切り記号
手作業では、同じ番号をコードの後ろに書式設定すると私の望む結果が得られますが、XAMLでこれを行いたいと思います。私は を試してみました何
私は無駄に次の回避策を試してみました:
<telerik:GridViewDataColumn DataMemberBinding="{Binding Path=VALUATION, StringFormat=C}" Header="{x:Static properties:Resources.AddressLine3}"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Path=VALUATION, StringFormat={}{0:C}}" Header="{x:Static properties:Resources.AddressLine3}"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Path=VALUATION, StringFormat=\{0:C\}}" Header="{x:Static properties:Resources.AddressLine3}"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Path=VALUATION, StringFormat='C'}" Header="{x:Static properties:Resources.AddressLine3}"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Path=VALUATION, StringFormat=c}" Header="{x:Static properties:Resources.AddressLine3}"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding VALUATION}" DataFormatString="{}{0:C}" Header="{x:Static properties:Resources.AddressLine3}"/>
は、私が行方不明です何がありますか?
あなたのコードは正常に動作し、通貨記号を表示し、問題がどこかにあるはずです。また、あなたのような簡単なチェックを行うことによってに渡されるデータの種類を判別することができますコンバータを使用して
。バインドするクラス(VALUATIONプロパティを含むクラス)の定義を表示できますか? – Evk
バインドにクラス定義が使用されていません。バインドはSQLクエリによって返されたデータテーブルに対して行われています。データグリッドの名前は 'dataGrid'で、データは' dataGrid.ItemsSource = ToDataTable(results).DefaultView; 'のようにバインドされています。データは問題なくバインドされます。 –
野生の推測では、あなたの数字を既にstringに変換しているかもしれません。_before_バインディングが行われるので、VALUATIONはすでにデータテーブルのString型(decimal \ floatではなく)です。 – Evk