更改 WPF ListView 中的小数点分隔符(绑定、字符串格式)

Change decimal separator in WPF ListView (Binding, String Format)

我有一个带有数字的数据表,它是 ListView 的 ItemsSource,我希望它们以“,”作为小数点分隔符和“。”来格式化为货币。作为组分隔符。

我通常知道它是如何在绑定(XAML 和代码隐藏)中与 StringFormat 一起工作的,如这个问题所示:

Changing the default thousand and decimal separator in a binding

但是这次不起作用:我的 ListView 显示“.”尽管如此,作为小数点分隔符。我的示例中的特殊之处在于我需要在运行时生成 GridViewColumns 并以编程方式将 DataTemplates 加载到它们中,例如:

 GridViewColumn Amount_col= new GridViewColumn();
 Amount_col.Header = "Gesamt";

 DataTemplate dataTemplate = new DataTemplate(typeof(TextBlock));
 FrameworkElementFactory Grid = new FrameworkElementFactory(typeof(Grid));
 FrameworkElementFactory Txtblck= new FrameworkElementFactory(typeof(TextBlock));

 Binding binding = new Binding("AMOUNT");       
 Txtblck.SetBinding(TextBlock.TextProperty, binding);
 binding.StringFormat = String.Format(new CultureInfo("de-DE"), "#,#.00€", Txtblck.Text); //not working
 
 Grid.AppendChild(Txtblck);
 dataTemplate.VisualTree = Grid;
 Amount_col.CellTemplate = dataTemplate;
 Eintraege_view.Columns.Add(Amount_col);

输出如下: https://i.stack.imgur.com/QuN6c.png(还不允许包含图片)

但我需要这样格式的输出:1.234,67€ 而不是 1,234.67€。

我还检查了我的 CurrentCulture 和 CurrentUICulture,它们都是“de-DE”。

我也试过:

binding.StringFormat = String.Format(new CultureInfo("de-DE"), "{0:N}", Txtblck.Text);

并且我尝试通过 NumberFormatInfo 更改小数点和组分隔符,但这也没有用。

我猜问题是 Binding、ListView 或 Textblock,但我找不到真正的问题。有人可以帮我解决这个问题,让我的分隔符成为 ','。

你的binding.StringFormat是不是有误?如果你想要 1.234,67€,它应该是 #.#,00€ 而不是 #,#.00€

binding.StringFormat = String.Format(new CultureInfo("de-DE"), "#.#,00€", Txtblck.Text);

或许您可以创建一个继承自 Binding 的 CultureAwareBinding class:

public class CultureAwareBinding : Binding
{
    public CultureAwareBinding(string path)
        : base(path)
    {
        ConverterCulture = CultureInfo.CurrentCulture;
    }
}

然后,在您的代码中使用此 class:

var binding = new CultureAwareBinding("AMOUNT");       
Txtblck.SetBinding(TextBlock.TextProperty, binding);

我从 中提取了这段代码。