WPF:是否可以从XAML调用函数

时间:2017-03-12 11:54:10

标签: wpf

所以我有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.34MB1.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功能?

1 个答案:

答案 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属性。