我有這樣定義的列: 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