2017-08-02 220 views
0

試圖獲得0.1500以顯示爲15.00。我的C#屬性是一個小數,我的xaml代碼是<TextBox Text="{Binding ClosingRate, StringFormat={}{0:P2}}"/>我希望格式將小數點向右移動2個位置,而不必更改小數值,也沒有前導0.「P2」格式讓我關閉,但顯示20.00%,我不想要百分號。WPF Xaml StringFormat爲百分比移動小數位數,但不爲%

+0

你可以使用一個轉換器 – Ben

回答

2

你不能通過簡單的StringFormat來完成。它只爲您提供只有與一些預定義的選項與有趣的角落案例很小的可擴展性。你想要做的是有效地實現你的價值,那種既不是由綁定也不是由格式直接支持,因爲這是算術運算。

P /%實際上也是* = 100的事實可能只是一個巧合。如果在3天內你有另一個需要「移動」不同位數的地方,你可以破解它跳過%,但它根本無法幫到你。

解決方法是...將顯示的值乘以100.您不需要更改源值 - 這只是強制UI讀取與源值不同的值的問題。

兩個最簡單的方法是:

  • 您可以在視圖模型,只需露出一個新的屬性,即ClosingRateFormatted做到這一點,這將是隻讀的,並且將返回ClosingRate * 100(只記得大約通知有關更改爲屬性現在)
  • 您可以使用IValueConverter並像平常一樣綁定到ClosingRate。轉換器有兩種方法,Convert和ConvertBack,你可以在一箇中執行* = 100,在另一箇中執行/ = 100(如果需要的話),這會改變傳遞給UI的值,但是源代碼不會注意。

使用Converter時,無需更改通知(與第一個選項相反),但使用轉換器肯定比創建新的只讀屬性更難一些。