Я не думаю, что вы можете избежать конвертера в этом случае. Ваше текущее использование пробелов рассматривается как литералы и просто вводится в окончательное число в этих позициях символов.
Правильная строка формата на самом деле "#, ## 0". "," - это фактически директива, которая группирует цифры в трехзначные группы и помещает разделительную строку между ними. Фактическая используемая строка разделителя берется из строкового свойства NumberGroupSeparator
NumberFormat
класса CultureInfo
, используемого xaml. Обычно это из культуры "en-US" и будет запятой.
Нет способа указать пользовательский экземпляр CultureInfo
, который будет использоваться, поэтому вы не можете манипулировать NumberGroupSeparator
. Следовательно, вам нужно будет использовать экземпляр IValueConverter
.
Этот код консольного приложения генерирует соответствующий вывод
NumberFormatInfo nfi = new CultureInfo(String.Empty).NumberFormat;
nfi.NumberGroupSeparator = " ";
Console.WriteLine((100000000).ToString("#,##0",nfi));
Console.WriteLine((-500).ToString("#,##0",nfi));