我有这样定义的列: WPF格式显示文本?
<DataGridTextColumn Binding="{Binding Path=FileSizeBytes, Mode=OneWay}" Header="Size" IsReadOnly="True" />
但
不是显示文件大小作为一个大数目,我想显示的单位,但仍然有它排序实际FileSizeBytes
。有什么方法可以在显示它之前通过函数或其他东西运行它?
@Igor:
的伟大工程。
http://img200.imageshack.us/img200/4717/imageget.jpg
[ValueConversion(typeof(long), typeof(string))]
class FileSizeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string[] units = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
double size = (long)value;
int unit = 0;
while (size >= 1024)
{
size /= 1024;
++unit;
}
return String.Format("{0:0.#} {1}", size, units[unit]);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
如果您无法将其他属性添加到源类(可能有多种原因),则另一种解决方案是创建一个IValueConverter并使用Converter属性将其绑定到绑定。然后每次绑定更新时,它都会先通过转换器代码运行。 – Charlie 2010-05-06 23:23:00
是的,好点。另一种方法是将源代码包装在视图模型中,在某些情况下这可能是一种矫枉过正。 – 2010-05-06 23:35:29
我不想更多属性的原因是因为我必须为它们中的每一个触发一个PropertyChanged事件......我可以用几十个触发器完成所有本质上相同的事情!另外,你将演示文稿与数据绑定在一起。我喜欢第二次sol'n。 – mpen 2010-05-07 01:25:03