2012-10-05 67 views
0

我有一個組合框,它通過一個轉換器綁定到一個雙精度集合,它只是用於從關聯屬性的名稱中定位集合。組合框位於PropertyTemplate的DataTemplate中。問題在於組合框不顯示當前系統區域中的值(即,使用','作爲小數點分隔符而不是'。')。屬性網格中的所有其他屬性都可以正確顯示(例如在文本框中)。WPF組合框文化沒有被應用到值

DataTemplate看起來像這樣,而ListComboBoxValuesConverter只返回一個雙精度集合。

<ComboBox 
    ItemsSource="{Binding Converter={StaticResource ListComboBoxValuesConverter}, 
     RelativeSource={RelativeSource AncestorType={x:Type propgrid:IPropertyDataAccessor}}}" 
    Text="{Binding Path=Value, 
     RelativeSource={RelativeSource AncestorType={x:Type propgrid:IPropertyDataAccessor}}, 
     Mode=TwoWay, 
     ValidatesOnExceptions=True, ValidatesOnDataErrors=True, NotifyOnValidationError=True}"> 
</ComboBox> 

感謝

編輯:

的解決方案,我想出來的是設置爲組合框的項目模板,並使用轉換器返回值是否爲正確格式的字符串。感覺這應該是沒有必要的,但是你去了!

<ComboBox.ItemTemplate> 
    <DataTemplate> 
     <Label Content="{Binding Converter={StaticResource FloatValueCultureConverter}, ConverterCulture={x:Static gl:CultureInfo.CurrentCulture}}"/> 
    </DataTemplate> 
</ComboBox.ItemTemplate> 

回答

0

也許問題可能是在轉換器,嘗試恢復使用的CultureInfo了toString作爲參數傳遞到轉換器(串轉換器從雙):

return someDouble.ToString(culture); 
+0

轉換器將返回整個雙打集合,而不是分別單獨進行。我想如果需要的話,轉換器可以將它們作爲字符串集合返回,但是組合框看起來應該知道如何在正確的文化中顯示雙打。 – james

+0

好吧,然後嘗試返回一個字符串列表和foreach一個使.ToString(文化)。檢查這是否有效,我認爲文化必須在綁定上設置。如果您定義了一個綁定,則您將替換默認綁定。 –

+0

謝謝,這沒有工作,但因爲轉換器正在返回一個列表,當列表發生變化時,在組合框中沒有觀察到,而沒有關閉重新打開的視圖。我使用項目模板做了類似的事情。 – james

0

您需要設置語言屬性在ComboBox或任何包含元素的當前文化的ietf-Tag上。如果您想尊重用戶區域設置的自定義設置,則必須將Binding的ConverterCulture設置爲當前文化。您可以在Localized Value Formatting in WPF找到有關此主題的詳細信息。