Avatar billede skov_p Praktikant
09. marts 2009 - 21:47 Der er 7 kommentarer og
1 løsning

WPF ListBox viser ikke noget tekst trods DisplayMemberPathProperty er defineret

Nedenstående kode skulle gerne vise indholdet af HeaderTekst i listbox'en

public void LoadCollection(IList collection) {   

      Binding bind = new Binding();
      bind.Source = collection;
      CollectionList.SetBinding( ListBox.ItemsSourceProperty, bind );
      CollectionList.SetBinding( ListBox.DisplayMemberPathProperty, "HeaderText" );
}

Der er 2 items i listen så der er data i listen.
I winform "plejer" ToString() at vises hvis der er specificeret en DisplayMember
Avatar billede skov_p Praktikant
09. marts 2009 - 22:06 #1
I winform "plejer" ToString() at vises hvis der IKKE er specificeret en DisplayMember
Avatar billede Syska Mester
10. marts 2009 - 00:43 #2
Jeg har ingen løsning ... men kan sige dig at det virker som du siger ... jeg får listen typen af min collection i ListBox'en.

Dog kan jeg ikke lige få den til at vise en egentlig value af mit sæt ... og gør mer eller mindre ligesom dig.

Dog blev jeg lidt forvirret over din navngivning af din ListBox, men det er en anden snak.

Så du må have en eller anden fejl i din kode ... da mit opfører sig som det skal.

// ouT
Avatar billede Syska Mester
10. marts 2009 - 00:53 #3
collection.ItemsSource = list;
collection.DisplayMemberPath = "Population";

Følgende virker ved mig ... om den Binding så giver en real update af de Items i ens liste ved jeg ikke ...

Men prøv dette og vend tilbage.

// ouT
Avatar billede Syska Mester
10. marts 2009 - 00:59 #4
http://www.wblum.org/listbind/net3/index.html

Oops! I forgot that the list box, unless told otherwise, displays whatever the ToString method of the objects return. And unless you override ToString in your class, it just returns the name of the class. Not too informative. So let's add an override in the Song class:

public override string ToString()
{
    return String.Format("{0} - {1}", title, length);
}

Now it looks a little better:





Så det er måske sådan det skal gøres på en ListBox ... hvem ved.

Det  var hvad jeg kunne støve op ... og så blev jeg selv lidt klogere ... håber det kan bruges.

Sengen kalder.

// ouT
Avatar billede skov_p Praktikant
10. marts 2009 - 10:41 #5
Hej

Det sidste indlæg fra dig beskriver det samme som jeg skrev med "I winform "plejer" ToString() at vises hvis der IKKE er specificeret en DisplayMember"

collection.ItemsSource = list;
collection.DisplayMemberPath = "Population";

Virker også for mig, bare ikke med DependecyProperties... det overlever jeg.

Men ToString() kaldes ikke dvs. listen viser intet hvis jeg ikke angiver DisplayMemberPath
Avatar billede Syska Mester
10. marts 2009 - 11:44 #6
Nej, men min kommentar var så også ... er du sikker på det skal virker hvis du ikke overrider ToString() på det som du binder til ?

Jeg kunne ikke få det til at virke nemlig ... og synes ikke jeg kan finde noget som siger at det skal virke ... på den måde som du laver det på.

Men synes jeg er blevet overrasket over mange ting her på det sidste med WPF, så det skal ikke undre mig hvis dette her heller ikke kan lade sig gøre.

// ouT
Avatar billede skov_p Praktikant
10. marts 2009 - 11:57 #7
Uanset om jeg laver override eller ej returnerer ToString() et eller andet
"And unless you override ToString in your class, it just returns the name of the class."

Men det er som om ToString ikke kaldes. Jeg prøvede med et ComboBox og fik samme resultat.
Avatar billede skov_p Praktikant
14. juli 2009 - 12:04 #8
Det er vist på tide at få lukket...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester