Entwickler-Ecke

WPF / Silverlight - Image und Databinding / Datatemplate


new.Matrix - Fr 07.03.08 17:18
Titel: Image und Databinding / Datatemplate
Hallo Zusammen,

Ich habe mehrere Bilder 1.gif-9.gif
Zudem habe ich eine Rangliste in einer Klasse gespeichert. Ausgegeben wird das ganze mit Databinding und Datatemplate. Für die Bilder habe ich jeweils Werte 1-9, also eigentlich ganz einfach um die richtigen Bilder holen, aber wie stelle ich das an?


Christian S. - Fr 07.03.08 18:51

Kannst Du die relevanten Teile Deiner Klasse mal zeigen? Mir ist gerade nicht klar, Instanzen welcher Klasse jetzt wo angezeigt werden sollen :gruebel:


new.Matrix - Fr 07.03.08 19:01

Also:


Shoprankingklasse:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 class ShopRanking
    {
...
        private byte _verfuegbar;
        public byte Verfuegbar
        {
            get { return _verfuegbar; }
            set { _verfuegbar = value; }
        }
...
}


wobei die Wert hier von 1-9 gehen.
Das ganze ist dann in einem Dict gespeichert:


C#-Quelltext
1:
Dictionary<int, ShopRanking> _shoprank = new Dictionary<int, ShopRanking>();                    


Nun habe ich in XAML ein Datatemplate/Databinding


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
...

<ObjectDataProvider x:Key="DatenRangliste" />
        <ObjectDataProvider x:Key="DatenPosition" />
        <DataTemplate x:Key="LayoutShoprangliste">
            <Grid>
            <TextBlock HorizontalAlignment="Left" Margin="5,0,0,4" Height="21" Width="50" Text="{Binding Path=RankNr}" />
            <TextBlock HorizontalAlignment="Left" Margin="25,0,0,4" Height="21" Width="250" Text="{Binding Path=Title}"/>
            <TextBlock HorizontalAlignment="Left" Margin="350,0,0,4" Height="21" Width="120" Text="{Binding Path=Preis}"/>
            <TextBlock HorizontalAlignment="Left" Margin="400,0,0,4" Height="21" Width="50" Text="sFr."/>
            <TextBlock HorizontalAlignment="Left" Margin="450,0,0,4" Height="21" Width="120" Text="{Binding Path=Versandpreis}"/>
            <TextBlock HorizontalAlignment="Left" Margin="500,0,0,4" Height="21" Width="50" Text="sFr."/>
            <TextBlock HorizontalAlignment="Left" Margin="550,0,0,4" Height="21" Width="50" Text="{Binding Path=Verfuegbar}"/>
            <TextBlock HorizontalAlignment="Left" Margin="600,0,0,4" Height="21" Width="120" Text="{Binding Path=Haendler}"/>
                <Image HorizontalAlignment="Left" Width="19" Height="19" Margin="550,0,0,4" Source="images/1.gif" />
            </Grid>
        </DataTemplate>

...

            <Grid Margin="0,0,0,0">
                <ItemsControl Margin="0,0,0,0"  ItemsSource="{Binding Source={StaticResource DatenPosition}}" ItemTemplate="{StaticResource LayoutPosition}" />
            </Grid>


und möchte jetzt die Grafiken dynamisch aufrufen, weiss aber nicht wie ich das anstellen soll. in php wärs leicht :-)


Christian S. - Fr 07.03.08 19:32

Als erste Idee fiele mir ein, einen eigenen Converter zu schreiben und den dann im Binding zu verwenden. Das klingt allerdings ein bisschen wie mit Kanonen auf Spatzen geschossen, aber was besseres fällt mir im Moment nicht ein :-?

//edit: Ein Beispiel dazu findest Du in der Doku, wenn Du dir die Converter-Eigenschaft der Binding-Klasse anguckst.


new.Matrix - Di 11.03.08 16:57

Danke dir wiedermal vielmals!

Hab nen Converter geschrieben, jetzt klappts :-D