Click here to Skip to main content
15,887,746 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hello guys,

I have a Listview with 5 Columns and in the last Column, id like to have 5 images instead of a text. e.g. 5 "stars" for "rating". I searched about an hour in the internet now, but still I've got no clue, what to do... I hope you can help me :)
Here is my code:

C#
public class ListHandler
    {
        private MainWindow mainWin;
        private ListView listview;

        private List<ListItem> items;

        public ListHandler(MainWindow win)
        {
            mainWin = win;
            listview = new ListView();
            listview.Width = 1100;
            listview.Height = 948;
            listview.Margin = new Thickness(60, 47, 0, 0);
                GridView myGridView = new GridView();
                myGridView.AllowsColumnReorder = true;
                    GridViewColumn myGridViewColumn;
                    // ... more GridViewColumns
                    myGridViewColumn = new GridViewColumn();
                    myGridViewColumn.DisplayMemberBinding = new Binding("Genre");
                    myGridViewColumn.Header = "Genre";
                    myGridViewColumn.Width = 120;
                    myGridView.Columns.Add(myGridViewColumn);
                    // What to do here?
                    myGridViewColumn = new GridViewColumn();
                    myGridViewColumn.DisplayMemberBinding = new Binding("Rating");
                    myGridViewColumn.Header = "Rating";
                    myGridViewColumn.Width = 120;
                    myGridView.Columns.Add(myGridViewColumn);
            listview.View = myGridView;
            InitializeItems();
            listview.ItemsSource = items;
            listview.SelectedItem = listview.Items.GetItemAt(0);
            listview.SelectedValue = listview.Items.GetItemAt(0);
            listview.SelectedIndex = 0;
            mainWin.Add(listview);
        }

        private void InitializeItems()
        {
            items = new List<ListItem>();
            for (int i = 0; i < 200; i++)
            {
                items.Add(new ListItem(i, "s1 ", "s2 ", "s3 ", "s4 ", "s5 ", 3));
            }
        }
    }

Thank you very much for help!
Posted

"Or you can use a converter from int to a image (generated or loaded)."

I tried this:
C#
public ImageBrush Rating
    {
    get { return new ImageBrush(new BitmapImage(new Uri("BewertungSternLeer.bmp", UriKind.RelativeOrAbsolute))); }
    }


and

C#
myGridViewColumn = new GridViewColumn();
myGridViewColumn.DisplayMemberBinding = new Binding("Rating");
myGridViewColumn.Header = "Rating";
myGridViewColumn.Width = 120;;
myGridView.Columns.Add(myGridViewColumn);


But sadly I have no idea what to do... please help me :S
 
Share this answer
 
Comments
Catalin Serafimescu 9-Jan-12 12:39pm    
It will take a while, hold on.
Create your own user control who displays a number of stars/half stars depending on integer or double. Then use that control and bind it to the rating field.

Or you can use a converter from int to a image (generated or loaded). See below. Use it as a guidance, it's just a quick sample.
C#
internal class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        int rating = Int32.Parse(value.ToString());
        switch (rating)
        {
            case 1:
                return "C:\\TEMP\\one_star.png";
            case 2:
                return "C:\\TEMP\\two_stars.png";
            default:
                return "C:\\TEMP\\no_stars.png";
        }
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}


And XAML:

HTML
<Window x:Class="RatingTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:RatingTest="clr-namespace:RatingTest"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <RatingTest:ImageConverter x:Key="ImageConverter"/>
        <XmlDataProvider x:Key="InventoryData" XPath="/Movies">
            <x:XData>
                <Movies xmlns="">
                    <Movie>
                        <Title>One</Title>
                        <Rating>1</Rating>
                    </Movie>
                    <Movie>
                        <Title>Two</Title>
                        <Rating>2</Rating>
                    </Movie>
                </Movies>
            </x:XData>
        </XmlDataProvider>
    </Window.Resources>
    <ListView ItemsSource="{Binding Source={StaticResource InventoryData}, XPath=Movie}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Title">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding XPath=Title}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Rating">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Image Source="{Binding XPath=Rating, Converter={StaticResource ImageConverter}}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
</Window>
 
Share this answer
 
v2
Thx! This works! But I still have another question: I can Add new Items to the list via
<listitem>
<number>1</number>
<songname>lied</songname>
<interpret>int</interpret>
<featuring>feat</featuring>
<album>alb</album>
<genre>hiphop</genre>
<rating>1</rating>
</listitem>

But I would like to do this in C#, like this:
List<listitem> list = new List<listitem>();
list.Add(...);
listviewer.ItemsSource = list;</listitem></listitem>

How to do this?

And how to set the maximum/minimum width of a GridViewColumn?

greetings abfl
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900