2010-09-16 8 views
5

W XAML łatwo jest użyć StringFormat='$#,0;$-#,0;Nil', aby wyświetlić zmienną wartość całkowitą jako ładnie sformatowaną kwotę w dolarach. np. 1024 wyjdzie jako "1 024 USD".Czy istnieje sposób, aby XAML/C# StringFormat pokazać całe dolarów dla większych kwot, ale centów za mniejsze kwoty?

Mam potrzebę radzenia sobie z liczbami od kilku centów do kilkuset dolarów - więc 0.45 powinien wyświetlać się jako "0,45 USD", ale wszystko powyżej pewnego progu (1? 9,99?) Powinno być wyświetlane jako całość Liczba dolarów. Na przykład. 12.73 powinien wyświetlać się jako "13 USD".

Zanim przejdę dalej i przetestuję umiarkowanie brudny i konkretny kod, czy ktoś ma dobry sprytny sposób na zrobienie tego? Najlepiej byłoby, gdyby wszystkie były w StringFormat :)

Odpowiedz

7

Nie widzę, jak wszystkie te logiki można umieścić w StringFormat.

Myślę, że najczystszym sposobem jest implementacja IValueConverter. Możesz użyć parametru konwertera do ustawienia progu, aby konwerter mógł być ponownie użyty i nie ma zakodowanej wartości.

Jeśli nie używasz wiązania dwukierunkowego i jeśli wdrażasz MVVM, prawdopodobnie lepiej jest mieć zmienną łańcuchową w modelu widoku, która zwraca wartość wyświetlaną w oparciu o wartość całkowitą.

+0

Dzięki, może masz rację i myślę o wersji na ciąg. Moje powiązanie jest jednokierunkowe, ale pozwolę, aby pytanie trwało przez jakiś czas. – whybird

1

Nie bój się tworzyć konwertera wartości dla tego konkretnego scenariusza.

Jeśli istnieje potrzeba biznesowa dla tego rodzaju formatowania, to najprawdopodobniej zostanie ponownie użyta później, a przekształcenie go w konwerter wartości ułatwia jego ponowne użycie i przetestowanie.

Sugestia Jay'a jest prawdopodobnie tak czysta, jak to tylko możliwe, ponieważ twoje wymaganie będzie wymagało użycia logiki dla progu formatowania.