2012-11-21 83 views
0

我想使用StringFormat在DataGrid中呈現我的數據。這些對象具有我想要使用的格式字符串的屬性...例如「{0:0。##} mmol/l」或「{0:0。##} mg/dl」以顯示結果在不同的單位。如何通過在DataGridTextColumn中綁定來使用StringFormat?

XAML:

<DataGrid ItemsSource="{Binding Results}"> 
    <DataGrid.Columns> 
    <DataGridTextColumn Header="Value" Binding="{Binding Value, Converter={StaticResource stringFormatConverter}}" /> 

C#中的轉換器:

public class StringFormatConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return string.Format("{0:0.##} mmol/l", value); 
    } 
    [...] 
} 

我怎麼能告訴轉換器中使用formatString的是我,而不是綁定到一個項目的屬性在當前版本的轉換器?

編輯: 結果是結果的一個ObservableCollection看起來像

public class Result 
{ 
    public double Value {get; set; } 
    public string Key {get; set; } 
    public string FormatString {get; set; } 
    [...] 
} 
+0

哪個對象具有formatString的財產?如果結果是IEnumerable ,那麼X是什麼,它有什麼屬性? – eoldre

回答

1

您可以將整個對象傳遞給轉換器,而不是它的Value屬性:

<DataGridTextColumn Header="Value" Binding="{Binding Converter={StaticResource stringFormatConverter}}" /> 

然後,可以根據給定的對象更改轉換器以格式化字符串:

public class StringFormatConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var result = (Result)value; 
     return string.Format(result.FormatString, result.Value); 
    } 
} 

另一種可能的解決辦法是有Result類暴露的另一個屬性,它將返回格式化的值,然後綁定反對FormattedValue(無轉換器):

public class Result 
{ 
    public double Value { get; set; } 
    public string Key { get; set; } 
    public string FormatString { get; set; } 

    public string FormattedValue 
    { 
     get { return string.Format(FormatString, Value); } 
    } 
} 
+0

第一個建議無法正常工作......該值無法轉換爲Result,因爲它是double類型的。我已經記住了第二個建議,但正在尋找一些漂亮的轉換器解決方案,但有時「保持簡單」仍然是最好的方法;)謝謝! – Llarian

+0

請注意,在第一個解決方案中,您應該更改綁定,即不綁定到「值」,而是綁定到數據上下文。仔細看看 - 該解決方案應該可行。 –