Squeak.ru - шаблоны программирования

Как автоматически преобразовать рейтинг из int в панель с изображениями в сетке данных?

Нужна помощь в одном. У меня есть 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 во что-то вроде панели с изображениями?

05.01.2013

Ответы:


1

Вы можете попробовать что-то вроде этого:

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 для каждого рейтинга. Таким образом, вы создаете файл .jpg с 1*, вы создаете .jpg с 2*. Затем в строке 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" />

это просто не приходит мне в голову .. это один из способов, как вы могли бы это сделать, не говоря уже о том, что это лучший :)

05.01.2013
  • Тысяча, спасибо за совет, но реально некрасиво выглядит, хочется сделать что-то, как в uTorrent. Мне нужно использовать изображения. 06.01.2013
  • Новые материалы

    API следующего поколения: gRPC n Javascript
    gRPC - быстро развивающаяся технология, которая потенциально может заменить протокол HTTP. Это быстрее, чем традиционные HTTP-вызовы, потому что он отправляет данные в двоичном формате, а не в..

    Ускоренный курс по жадным алгоритмам
    Дай мне, дай мне, дай мне Аудитория Эта статья предназначена для инженеров, достаточно хорошо разбирающихся в программировании, структурах данных и алгоритмах. Он в основном основан на..

    Изучайте Java (Урок 2: Комментарии)
    Как и зачем использовать комментарии в java с примерами Введение: Комментарии — это строки текста в программе Java, которые игнорируются компилятором и используются для добавления..

    Async Await в Swift: легкое управление параллелизмом
    Введение в запуск асинхронного кода Асинхронный код выполняет несколько операций одновременно. Параллелизм необходим при выполнении тяжелых вычислений или сетевых запросов. Однако это может..

    Очистить файлы Program .cache в Ubuntu 20.10
    Очистите кеш за несколько простых шагов! GNU / Linux реализовал эффективное управление хранилищем для своих пользователей. Но заметили ли вы, что в вашей системе Linux заканчивается место,..

    Использование Node.js для чтения действительно больших файлов (часть 1)
    В этом сообщении в блоге есть интересный источник вдохновения. На прошлой неделе кто-то на одном из моих каналов в Slack опубликовал тестовое задание, которое он получил на должность..

    Введение в градиентный спуск и обратное распространение
    Введение в градиентный спуск и обратное распространение Как машинное обучение? Машинное обучение ( ML ) - это исследование компьютерных алгоритмов, которые автоматически улучшаются по..