Nejčastěji odpovídající uživatel
ListBox ve WPF

Dotaz
-
Zdravím,
potřeboval bych poradit. Mám třídu pojmenuju ji třeba "Words" ve které mám 2 proměnné typu string například: "first" a "second". A teď potřebuji vkládat objekt typu Words do listboxu tak aby se mi nějak pěkně zobrazili obě proměnné first a second. A pokud někdo klikne na položku v listboxu tak zase chci dostat zpátky objekt typu Words.
Snad jsem to pochoptelně napsal. Předem díky za nápady!!:-)
Odpovědi
-
Jsou v zásadě 3 možnosti:
1) Buď si do třídy Words přidáte ještě jednu read only property, která vrátí ta dvě slova, a ListBoxu nastavte DisplayMemberPath na název této vlastnosti.public class Words { public string First { get; set; } public string Second { get; set; } public string Both { get { return First + " " + Second; } } }
2) DisplayMemberPath nenastavujte a místo toho přepište metodu ToString tak, aby vracela to, co potřebujete. ListBox vezme objekty, které jsou uvnitř, a zavolá na nich ToString - výsledek pak zobrazí jako položku seznamu, pokud tedy nepoužijete šablonu.
public class Words { public string First { get; set; } public string Second { get; set; } public override string ToString()
{ return First + " " + Second;
} }3) Napište si šablonu, kde nadefinujete, jak konkrétně to má vypadat.
<ListBox ...> <ListBox.ItemTemplate> <DataTemplate> <TextBlock TextWrapping="Wrap"> <Run Text="{Binding First}" /> <Run Text=" " /> <Run Text="{Binding Second}" /> </TextBlock> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
Píšu to z hlavy, tak snad to bude dobře.Best regards Tomáš Herceg | ASP.NET MVP (http://www.vbnet.cz) Chief Software Architect @ http://www.riganti.cz
- Označen jako odpověď Matěj Hireš úterý 24. dubna 2012 9:04
Všechny reakce
-
-
Jsou v zásadě 3 možnosti:
1) Buď si do třídy Words přidáte ještě jednu read only property, která vrátí ta dvě slova, a ListBoxu nastavte DisplayMemberPath na název této vlastnosti.public class Words { public string First { get; set; } public string Second { get; set; } public string Both { get { return First + " " + Second; } } }
2) DisplayMemberPath nenastavujte a místo toho přepište metodu ToString tak, aby vracela to, co potřebujete. ListBox vezme objekty, které jsou uvnitř, a zavolá na nich ToString - výsledek pak zobrazí jako položku seznamu, pokud tedy nepoužijete šablonu.
public class Words { public string First { get; set; } public string Second { get; set; } public override string ToString()
{ return First + " " + Second;
} }3) Napište si šablonu, kde nadefinujete, jak konkrétně to má vypadat.
<ListBox ...> <ListBox.ItemTemplate> <DataTemplate> <TextBlock TextWrapping="Wrap"> <Run Text="{Binding First}" /> <Run Text=" " /> <Run Text="{Binding Second}" /> </TextBlock> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
Píšu to z hlavy, tak snad to bude dobře.Best regards Tomáš Herceg | ASP.NET MVP (http://www.vbnet.cz) Chief Software Architect @ http://www.riganti.cz
- Označen jako odpověď Matěj Hireš úterý 24. dubna 2012 9:04
-