Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Hoe plaatjes linken aan data in MVVM

Pagina: 1
Acties:

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 19-11 14:59
Hallo allemaal,

Ik ben bezig met een Windows Phone applicatie met Caliburn.Micro framework. Nu wil ik data tonen in een ListBox en vraag me af wat de beste manier is om (statische) plaatjes te tonen in de ListBox.
Op mijn ViewModel heb ik een collectie van objecten en die wordt gebind aan de ListBox in de View door Caliburn.Micro.

Op basis van een eigenschap van het object waaraan gebind is wil ik een plaatje tonen in de ListBox. Nu zou ik op het object een eigenschap kunnen maken waar dit plaatje gegenereerd wordt. Maar de plaatjes zijn statisch en er zijn een beperkt aantal opties (zeg 3 verschillende plaatjes). Het lijkt mij dat die 3 plaatjes bij de Views horen en dus niet in de ViewModel opgenomen moeten worden.

Een andere optie zou zijn om een Uri property op de ViewModel te maken die een uri naar het plaatje terug geeft, maar dan wordt het moeilijk om de ViewModel te hergebruiken voor een Windows 8 app bijvoorbeeld. Hoe zou ik dit het beste op kunnen lossen?

Hail to the king baby!


  • BM
  • Registratie: September 2001
  • Laatst online: 19:42

BM

Moderator Spielerij
Zoek eens naar ValueConverters :) Die lijken me perfect voor deze situatie :) Daarmee kan je op basis van een property op je bound object (een string/int/whatever) een heel andere waarde laten outputten. Een boolean to visibility converter is een populaire, maar je kunt op deze manier praktisch 'alles' naar 'alles' converteren :)

[ Voor 62% gewijzigd door BM op 11-07-2013 16:26 ]

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 19-11 14:59
Bedankt, dat is inderdaad wat ik zoek, ben er even mee aan het kijken of ik het hiermee voor elkaar kan krijgen, maar ik verwacht van wel. Stom dat ik daar zelf niet aan gedacht had.

Hail to the king baby!


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Een ValueConverter lijkt me in dit geval ook de juiste oplossing, maar eventueel zou je ook nog naar DataTriggers kunnen kijken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Wel heel goed opletten hoe je die implementeert. Want als je plaatjes gebruikt spawn je zo een hele trits aan bitmaps die in geheugen worden gezet. Daar wordt je niet vrolijk van, en je memory manager al helemaal niet.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 19-11 14:59
Grijze Vos schreef op vrijdag 12 juli 2013 @ 09:19:
Wel heel goed opletten hoe je die implementeert. Want als je plaatjes gebruikt spawn je zo een hele trits aan bitmaps die in geheugen worden gezet. Daar wordt je niet vrolijk van, en je memory manager al helemaal niet.
Heb je het dan over de ValueConverter of de DataTriggers? Ik heb de ValueConverter nu zo geimplementeerd:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class SoortToImageConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object Parameter, System.Globalization.CultureInfo culture)
        {
            string SoortWeergave = value as string;
            if (SoortWeergave == null)
            {
                return null;
            }

            if (SoortWeergave.Contains(","))
            {
                SoortWeergave = SoortWeergave.Substring(SoortWeergave.IndexOf(",") - 1);
            }
            
            return new BitmapImage(new Uri("Images/" + SoortWeergave + ".png", UriKind.Relative));
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }


Ik kan wel een static list met BitmapImages toevoegen en als er al eentje gebruikt is die hergebruiken in plaats van continue nieuwe BitmapImages aanmaken.

@Woy: Ik zal ook eens kijken hoe DataTriggers werken. Bedankt voor de suggestie.

Hail to the king baby!

Pagina: 1