代码之家  ›  专栏  ›  技术社区  ›  Boris Lipschitz

WPF数据报中的自定义字符串格式

  •  6
  • Boris Lipschitz  · 技术社区  · 14 年前

    在DataGrid中设置列的自定义格式最有效的方法是什么?我不能使用以下StringFormat,因为我的复杂格式还依赖于此ViewModel的其他一些属性。(例如,价格格式有一些基于不同市场的复杂格式逻辑。)

    Binding ="{Binding Price, StringFormat='{}{0:#,##0.0##}'}"
    
    1 回复  |  直到 14 年前
        1
  •  6
  •   Matt Hamilton    14 年前

    您可以使用带有转换器的多绑定。首先定义一个IMultiValueConverter,该转换器使用第二个中指定的格式格式化第一个值:

    public class FormatConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            // some error checking for values.Length etc
            return String.Format(values[1].ToString(), values[0]);
        }
    
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    

    现在,将ViewModel属性和格式绑定到相同的内容:

    <MultiBinding Converter="{StaticResource formatter}">
        <Binding Path="Price" />
        <Binding Path="PriceFormat" />
    </MultiBinding>
    

    关于这一点,很好的一点是,价格应该如何格式化的逻辑可以存在于ViewModel中,并且是可测试的。否则,您可以将该逻辑移入转换器并传递它所需的任何其他属性。