tengo una columna definida como esto:¿Aparece el texto de formato WPF?
<DataGridTextColumn Binding="{Binding Path=FileSizeBytes, Mode=OneWay}" Header="Size" IsReadOnly="True" />
Pero en lugar de mostrar el tamaño del archivo como un número grande, me gustaría mostrar las unidades, pero todavía tienen que ordenar por el actual FileSizeBytes
. ¿Hay alguna forma de ejecutarlo a través de una función o algo así antes de mostrarlo?
@Igor:
funciona muy bien.
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();
}
}
En el caso de que no pueda agregar otra propiedad a la clase fuente (puede haber una variedad de razones para esto), la otra solución sería crear un IValueConverter y entregarlo al Enlace utilizando la propiedad Convertidor. Luego, cada vez que las actualizaciones de enlace se ejecutarán primero a través del código del convertidor. – Charlie
Sí, buen punto. Una alternativa sería envolver la clase fuente en un modelo de vista, que en algunos casos podría ser una exageración. –
La razón por la que no quiero ir con más propiedades es porque tengo que activar un evento PropertyChanged para cada una de ellas ... ¡Podría terminar con docenas de factores desencadenantes, todo por lo que es esencialmente lo mismo! Además, estás atando la presentación con datos. Aunque me gusta el segundo sol'n. – mpen