所以我有Calss Member
来计算我的实际文件大小:
private static ulong _fileSize;
public static ulong FileSize
{
get { return _fileSize; }
set
{
_fileSize = value;
OnPropertyChanged();
}
}
我的班级工具INotifyPropertyChanged
。
XAML
然后我的UI
会自动更新:
<Label
Content="{Binding Path=(my:MyClass.FileSize)}"
ContentStringFormat="{}{0:0.##}"/>
但我的问题是我的file size
位于bytes
,我想将其转换为人类可读的格式,例如2.34MB
或1.01 GB
,所以我有这个功能:
static string SizeSuffix(ulong buyes, int decimalPlaces = 0)
{
string[] SizeSuffixes = { "bytes", "KB", "MB", "GB" };
if (buyes > 0)
{
var mag = (int)Math.Max(0, Math.Log(buyes, 1024));
var adjustedSize = Math.Round(buyes / Math.Pow(1024, mag), decimalPlaces);
return String.Format("{0} {1}", adjustedSize, SizeSuffixes[mag]);
}
else
return "0";
}
所以我的问题是:是否可以从SizeSuffix
拨打XAML
功能?
答案 0 :(得分:0)
可以使用转换器,使用转换函数将原始文件大小字节转换为所需的字符串,但这可能是使用此(转换)值公开属性的更好方法。
在这种情况下,在视图模型(数据上下文)中创建另一个属性非常有用,它将转换为人类可读的文件大小,因为它是一个只读属性,可以在你的模特。
代码:
private static ulong _fileSize;
private string _fileSizeString;
public static ulong FileSize
{
get { return _fileSize; }
set
{
_fileSize = value;
OnPropertyChanged("FileSize");
OnPropertyChanged("FileSizeString");
}
}
public string FileSizeString { get { return SizeSuffix(FileSize); }}
然后,在你的xaml中,你只需将你的标签绑定到FileSizeString属性。