2015-10-23 62 views
0

在我的應用程序中,我處理的是貨幣價值,但是精確到分。因此,我決定將所有金額存儲爲美分的整數。但是,當我將一個值綁定到XAML中,我想看到以美元的價值,使用類似StringFormat除以100(或任何自定義縮放比例)

<TextBlock Text="{Binding Product.Price, StringFormat={}{***}}"/> 

其中***應通過適當的東西來代替。我讀通過文檔http://msdn.microsoft.com/en-us/library/vstudio/0c899ak8(v=vs.100).aspx

其中有除以1000(使用','),乘以100(使用'%')等的示例等。有沒有辦法做自定義比例(如除以100)在StringFormat,還是真的不得不寫一個自定義值轉換器?

+0

如何在產品中添加屬性來格式化價格的內部價值? –

+0

我有更多的數字每個產品,並且我將它們存儲在一個分貝。我只在顯示時需要它,所以我認爲將屬性添加到模型是錯誤的,因爲它只是視圖的關注點。 – EluciusFTW

回答

1

之後我寫了一個很簡單的ValueConverter建議,即

public class CentConverter : IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 

     if (targetType != typeof(string)) throw new NotImplementedException(); 
     var valueInCents = Int32.Parse(value.ToString()); 
     return String.Format("{0:C}", (double)valueInCents/100); 

    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
     throw new NotImplementedException(); 
    } 
} 

因爲我知道我總是希望僅在轉換環境中使用它對一個字符串,我永遠不需要轉換回來。如果有強類型轉換器的版本,這將是很好的(或更好的,更具體的,類型化的類型object),例如,用如下這樣一個能擺脫鑄件的方法signaure,

public string Convert(int value, object parameter, CultureInfo culture) 
3

除了您提到的操作(縮放1000,或執行百分比或百分之百轉換)之外,無法使用格式字符串執行「自定義」縮放。

您可以通過使用Converter解決它,或者如果你要使用它在其他地方(這不是一個非常特殊的情況下),你可能需要一個屬性添加到您的Product,是這樣的:

decimal PriceInDollars { get { return Price/100; } 

請記住,如果這是一個需要,請通知您有關此房產的Price更改。

如果你想要去的Converter路線,和你想要的東西通用的,你可以試試這個:http://www.codeproject.com/Articles/239251/MathConverter-How-to-Do-Math-in-XAML或其他許多人散佈在網絡上的一個(搜索像「數學轉換WPF」,有很多)。無需從頭開始編寫自己的代碼。

使用一個我聯繫(這我沒有關聯的話),這樣的:

<!-- somewhere in resources --> 
<ikriv:MathConverter x:Key="MathConverter" /> 

然後:

<TextBlock Text="{Binding Product.Price, 
        Converter={StaticResource MathConverter}, 
        ConverterParameter=x/100}"/> 
+0

正如我上面評論的那樣,我的應用程序中有很多這些數字,而不僅僅是一個價格相當的產品 - 所以我不想爲模型添加許多屬性。這應該在視圖中解決。 – EluciusFTW

+1

然後'轉換器'是你的朋友,看到我的編輯鏈接到一些相當通用的東西 – Jcl

+0

Thx,我嘗試鏈接轉換器。現在我得到正確的數值(即17變爲0,17),但現在我想顯示爲$ 0.17 ... – EluciusFTW