Привязка к функции возможна в WPF, но обычно это больно. В этом случае более элегантный подход заключается в создании другого свойства, которое возвращает отформатированную строку и связывается с ней.
class FileInfo {
public int FileSizeBytes {get;set;}
public int FileSizeFormatted {
get{
//Using general number format, will put commas between thousands in most locales.
return FileSizeBytes.ToString("G");
}
}
}
В XAML, привязка к FileSizeFormatted
:
<DataGridTextColumn Binding="{Binding Path=FileSizeBytes, Mode=OneWay}" Header="Size" IsReadOnly="True" />
РЕДАКТИРОВАТЬ Альтернативное решение, спасибо Чарли за указание на это.
Вы можете написать свой собственный преобразователь значений, реализовав IValueConverter
.
[ValueConversion(typeof(int), typeof(string))]
public class IntConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
//needs more sanity checks to make sure the value is really int
//and that targetType is string
return ((int)value).ToString("G");
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
//not implemented for now
throw new NotImplementedException();
}
}
Тогда в XAML:
<UserControl.Resources>
<src:DateConverter x:Key="intConverter"/>
</UserControl.Resources>
...
<DataGridTextColumn Binding="{Binding Path=FileSizeBytes, Mode=OneWay, Converter={StaticResource intConverter}}" Header="Size" IsReadOnly="True" />