I'm not sure this is the best way to do it (I would prefer to use a trait if an appropriate one exists), but a simple ValueConverter does seem to do the job. No need to manually build up the string, just use ToString to format it for the locale. Note that I haven't tested this for other locales yet.
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
string inputValue = (string)value;
decimal result;
string finalResult
= decimal.TryParse(
inputValue,
NumberStyles.Number | NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol,
culture,
out result)
? result.ToString("N", culture)
: inputValue;
return finalResult;
}