1

一件事需要帮助。我有DataGrid,将它绑定到这个类:

class Book
{
    public string Title { get; set; }
    public string Author { get; set; }
    public string Tags { get; set; }
    public string Year { get; set; }
    public string Description { get; set; }
    public string Path { get; set; }
    public int Rating { get; set; }
    public Statistics Stats { get; set; }
}

这是 XAML:

<DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" Margin="56,49,12,12" Name="booksDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" ColumnWidth="*" MinWidth="400" MinHeight="250">
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="titleColumn" Binding="{Binding Path=Title}" Header="Title" Width="2*" />
            <DataGridTextColumn x:Name="authorColumn" Binding="{Binding Path=Author}" Header="Author" Width="*" />
            <DataGridTextColumn x:Name="tagsColumn" Binding="{Binding Path=Tags}" Header="Tags" Width="*" />
            <DataGridTextColumn x:Name="yearColumn" Binding="{Binding Path=Year}" Header="Year" Width="*" />
            <DataGridTextColumn x:Name="ratingColumn" Binding="{Binding Path=Rating}" Header="Rating" Width="*" />
        </DataGrid.Columns>
</DataGrid>

但我想显示的评级不是数字,而是五颗星的图像。如何将 int 值转换为带有图像的面板之类的东西?

4

1 回答 1

0

你可以尝试这样的事情:

class Book
{
    public string Title { get; set; }
    public string Author { get; set; }
    public string Tags { get; set; }
    public string Year { get; set; }
    public string Description { get; set; }
    public string Path { get; set; }
    public int Rating { get; set; }
    public Statistics Stats { get; set; }

  public string displayRating 
    {
        get
        {
            if (Rating > 0)
            {
                var temp = "";
                for (int i = 0; i < Rating; i++)
                {
                    temp += "*";
                }
                return temp;
            }
            return "No rating found";
        } 
    }
}

如果您的Rating属性 = 5,则displayRating属性将为"*****". 您可以像这样将该属性绑定displayRating到您的gridview:

 <DataGridTextColumn x:Name="ratingColumn" Binding="{Binding Path=displayRating}" Header="Rating" Width="*" />

编辑:

如果您需要的最大星星数量不是一个超级大的数字(例如 30+),您可以为每个评级制作一个 .jpg。所以你用 1* 制作一个 .jpg 文件,用 2* 制作一个 .jpg 文件。然后在你的 displayRating 字符串中执行以下操作:

  public string displayRating 
    {
        get{ return "pathToYourJpg" + Rating + ".jpg";}
    }

假设您有以下 Jpg:

c:/users/desktop/rating1.jpg
c:/users/desktop/rating2.jpg
c:/users/desktop/rating3.jpg
c:/users/desktop/rating4.jpg

如果您的评分为 4,则 displayProperty 评分将返回 "c:/users/desktop/rating4.jpg"使用此路径将其绑定到您的数据网格。

像这样的东西(不确定,我自己实际上没有做过,但应该是这样的):

<Image Source="{Binding Path=displayRating}" Stretch="Fill" Height="100" Width="100" />

这只是我的想法..这是你可以做到的一种方式,而不是说这是最好的:)

于 2013-01-05T20:00:11.000 回答