首页 > 解决方案 > UWP Datagrid 格式列内容

问题描述

我正在尝试编写一个音乐播放器。现在我的音乐列表是这样的:

我的数据网格视图

但是,我不希望音乐持续时间像 int 一样显示。我希望它类似于“3:15”。如何将其转换为时间格式?

这是我失败的尝试:

            <controls:DataGridTextColumn
                MaxWidth="120"
                Binding="{Binding Duration}"
                Header="Duration">
                <controls:DataGridTextColumn.CellStyle>
                    <Style TargetType="TextBox">
                        <Setter Property="Text" Value="{Binding Converter={StaticResource MusicDurationConverter}}" />
                    </Style>
                </controls:DataGridTextColumn.CellStyle>
            </controls:DataGridTextColumn>

我已经创建了转换器类,但找不到此转换器。(转换器和 xaml 在同一个文件夹下。)

class MusicDurationConverter : Windows.UI.Xaml.Data.IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value is string)
        {
            int seconds;
            if (int.TryParse((string)value, out seconds)) return ToTime(seconds);
        }
        if (value is int) return ToTime((int)value);
        return "";
    }

    private string ToTime(int seconds)
    {
        int second = seconds % 60;
        int minute = (seconds - second) / 60;
        return string.Format("{0}:{1}", minute, second);
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return null;
    }

}

此外,我希望收藏栏中的“错误”消失。当鼠标悬停在该单元格上方时,会显示一个心形按钮。

提前致谢!

标签: c#uwpdatagrid

解决方案


您已成功创建转换器类,但您似乎没有在资源列表中创建它的实例。

尝试添加:

<Page.Resources>
    <MusicDurationConverter x:Key="MusicDuarationConverter"/>
</Page.Resources/>

并修改绑定的位置:

<controls:DataGridTextColumn
                MaxWidth="120"
                Binding="{Binding Duration, Converter={StaticResource MusicDurationConverter}}"
                Header="Duration">
</controls:DataGridTextColumn>

此致。


推荐阅读