Есть ли способ заставить XAML / C # StringFormat показывать целые доллары для больших сумм, но центы для меньших? - PullRequest
5 голосов
/ 16 сентября 2010

В XAML достаточно просто использовать StringFormat='$#,0;$-#,0;Nil' для отображения связанной целочисленной переменной в виде красиво отформатированной суммы в долларах.например, 1024 будет выглядеть как '$ 1024'.

Мне нужно иметь дело с числами от нескольких центов до нескольких сотен долларов - поэтому 0.45 должен отображаться как '$ 0,45'но все, что больше некоторого порога (1? 9,99?), должно отображаться как целая сумма в долларах.Например, 12.73 должно отображаться как '$ 13'.

Прежде чем я начну писать какой-то умеренно грязный и конкретный код, есть ли у кого-нибудь хороший умный способ сделать это?В идеале все это должно быть в StringFormat:)

Ответы [ 2 ]

7 голосов
/ 16 сентября 2010

Я не вижу, как всю эту логику можно поместить в StringFormat.

Я думаю, что самый чистый способ - это IValueConverter реализация. Вы можете использовать параметр конвертера, чтобы установить пороговое значение, чтобы конвертер можно было использовать повторно и не иметь жестко заданного значения.

Если вы не используете двустороннюю привязку и не внедряете MVVM, вероятно, предпочтительно иметь строковую переменную в модели представления, которая возвращает отображаемое значение на основе целочисленного значения.

1 голос
/ 16 сентября 2010

Не бойтесь создавать конвертер значений для этого конкретного сценария.

Если для такого типа форматирования существует бизнес-необходимость, то в любом случае он, скорее всего, будет использован повторно позже, а преобразователь значений облегчает его повторное использование и тестирование.

Предложение Джея, вероятно, настолько чистое, насколько это возможно, поскольку ваше требование должно будет использовать логику для порога форматирования.

...