0

StringFormatを使用してDataGridにデータを表示したいと思います。オブジェクトには、使用したいフォーマット文字列を持つプロパティがあります...たとえば、「{0:0。##} mmol / l」または「{0:0。##} mg/dl」で結果を表示します。さまざまな単位で。

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);
    }
    [...]
}

コンバーターの現在のバージョンのフォーマットストリングの代わりに、バインドしているアイテムのプロパティであるフォーマットストリングを使用するようにコンバーターに指示するにはどうすればよいですか?

編集:結果は次のような結果のObservableCollectionです

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

1 に答える 1

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); }
    }
}
于 2012-11-21T19:25:54.557 に答える