Laden...

Databinding an Listbox (Code Behind, keine strings)

Erstellt von ScoobyDoh! vor 13 Jahren Letzter Beitrag vor 13 Jahren 6.788 Views
ScoobyDoh! Themenstarter:in
69 Beiträge seit 2010
vor 13 Jahren
Databinding an Listbox (Code Behind, keine strings)

Halli hallo,

wie kann ich denn eine von mir Typisierte Liste List<Kontakt> per binding an eine Listbox hängen.
Die Liste enthält aber verschiedene Typen, von DateTime, bools, strings.

wie bewerkstellige ich das?

schonmal danke fürs lesen.

gruß ScoobyDoh!

:::

S
341 Beiträge seit 2008
vor 13 Jahren

Servus,

Es wäre toll wenn man erst schaut und dann Frage 😉

Erster Treffer bei Google.
http://wblum.org/listbind/net3/index.html

Gruß

**Nur die Kenner können mit 10 Fingern bis 1023 zählen !!**
private int Main()
{
   string programmingSkills = getMySkills("programming")
   return = 1;
}
ScoobyDoh! Themenstarter:in
69 Beiträge seit 2010
vor 13 Jahren

Hi Smou,

die Seite kannt ich schon, trotzdem danke, ich glaub ich mag das heute net ganz kapieren wie das funktioniert.

Gbit es eigentlich noch alternative Möglichkeiten, wie man eine Listbox mit Information von einer Liste füllt?

gruß ScoobyDoh!

:::

458 Beiträge seit 2007
vor 13 Jahren

Was ist schwer an einer ObservableCollection<T> zu verstehen?
Da steht doch ganz genau was du machen musst um deine Daten zu binden.
Mach dir eine Klasse


class Kontakte : ObservableCollection<Kontakt>

Die kannst du dann an deine Listbox binden.

be the hammer, not the nail!

P
660 Beiträge seit 2008
vor 13 Jahren

Ich glaube das Problem ist hier nicht das Binden an die ListBox sondern eher sowas wie eine Master/Detail ansicht zu realisieren

Hier sind einige Links
Silverlight Business Apps
Create Silverlight Master

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

ScoobyDoh! Themenstarter:in
69 Beiträge seit 2010
vor 13 Jahren

Hallo,

danke für eure Antworten, leider bin ich immer noch nicht weitergekommen.

Ich Serialisiere die Liste aus einer XML und den Inhalt meines Arrays/Liste möchte ich dann an die Listbox binden.

:::

ScoobyDoh! Themenstarter:in
69 Beiträge seit 2010
vor 13 Jahren

Ich hab jetzt echt rumprobiert und es funktionierte nichts.
Also wie war das nun genau gemeint?

Ich erklär nochmal kurz wies bei mir jetz ausseiht:
Ich deseralisiere eine XML datei und lade mir somit eine Liste vom Typ Kontakt und diese möchte ich gerne an die ListBox dranhängen. Und zwar soll dann in der ersten Zeile der jeweilige Eintrag und in der zweiten dann der Wert stehen.

Die Liste einfach aub ObservableCollection umzustellen hat erstmal nichts gebracht.
Und wie ist das mit dieser weiteren Klasse gemeint?


class Kontakte : ObservableCollection<Kontakt>

Und das wars... und dann kann ich das an die Listbox binden? Das hab ich nun auch versucht, aber da geschah auch nichts, auch keine Fehlermeldung.

gruß ScoobyDoh!

:::

4.942 Beiträge seit 2008
vor 13 Jahren

Hallo,

hast du denn jetzt überhaupt das Binding bei der ListBox aktiviert?
Es gibt zwei Möglichkeiten: entweder wie im Link von Smou über den DataContext und Überschreiben der ToString()-Methode oder aber du erstellst dir schon entsprechende Unterelemente in deiner ListBox und zeigst dort dann per Binding die einzelnen Daten an:


<TextBlock Text="{Binding Path=<Spalte>}" />

(wobei <Spalte> dann jeweils die Eigenschaft deiner Kontakt-Klasse wäre)

Und noch eine weitere Möglichkeit wäre das direkte Binden der XML-Datei mittels XmlDataProvider.

ScoobyDoh! Themenstarter:in
69 Beiträge seit 2010
vor 13 Jahren

@TH69,

ah danke 😉
Das hat mir zumindest das verständnis schonmal um einiges weitergebracht.

Hab jetz auch schon alle möglichen Ergebnisse ghabt, bis auf des was ich haben will.

in meiner Liste, an der Position X, möchte ich allle Eigenschaften mir in der Liste Anzeigen lassen.

:::

458 Beiträge seit 2007
vor 13 Jahren

Was hindert sich daran?
Der erste Post enthielt den Link mit allen Infos und Beispielen die du brauchst.

be the hammer, not the nail!

ScoobyDoh! Themenstarter:in
69 Beiträge seit 2010
vor 13 Jahren

@aequitas:

versteh schon das man hier angepisst is wenn jemand jeden scheiss nachfrägt, aber ich hab das Beispiel von oben den ganzen Nachmittag durchgearbeitet und ich bekoms einfach net hin.

:::

U
1.578 Beiträge seit 2009
vor 13 Jahren

Weil du dich irgendwie anstellst ^^

xaml.cs:

public class MyWindow : Window
{
    public MyWindow()
    {
        InitializeComponent();
        DataContext = this; // Damit das Binding weiß wo es suchen muss

        Contacts = new ObservableCollection<Contact>();
        foreach (var contact in FromXml())
            Contacts.Add(contact);
    }

    public ObservableCollection<Contact> Contacts { get; set; }
}

xaml:

<Window ...>
    <ListBox ItemsSource="{Binding Contacts}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" /> <!-- Contact.Name anzeigen -->
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Window>
S
341 Beiträge seit 2008
vor 13 Jahren

Wenn du mit all den Infos von den vorherigen Posts nicht klar kommst solltest du uns vllt einfach mal in einem snippet zeigen wie du das überhaupt versuchts...
Ich vermute das es nicht am Binding selbst liegst sondern am fehlendem Basisverständnis für die ganze Geschichte.

Ich empfehle dir dazu ein Buch zu kaufen und dich langsam in komplizierte Dinge einzuarbeiten.

Versteh mich nicht falsch... aber wenn man noch kein Fundament hat auf dem man aufbauen kann bringt das alles nix.

lg

**Nur die Kenner können mit 10 Fingern bis 1023 zählen !!**
private int Main()
{
   string programmingSkills = getMySkills("programming")
   return = 1;
}
ScoobyDoh! Themenstarter:in
69 Beiträge seit 2010
vor 13 Jahren

...

Ich empfehle dir dazu ein Buch zu kaufen und dich langsam in komplizierte Dinge einzuarbeiten.

Versteh mich nicht falsch... aber wenn man noch kein Fundament hat auf dem man aufbauen kann bringt das alles nix.

lg

Kein Ding ist auch vollkommen verständlich 😉
Nur muss das jetzt in meinem Projekt einfach schnell funktionieren das ich weitermachen kann.

Bevor ich das Projekt anfing war mir ja noch gar nicht klar das ich DataBinding benötige.
Soweit funzt das jetzt auch. Nur noch net ganz richtig. Kann sein das ich nochmal die Hilfe brauche, derweil komm ich aber weiter.

Aber mir ist auch klar geworden das, das Thema DataBinding doch mehr einarbeitungszeit benötigt wie ich jetzt zur verfügung habe.

Trotzdem danke für eure Geduld und vielen dank an "David W" für den sehr hilfreichen Beitrag.

gruß ScoobyDoh!

:::

ScoobyDoh! Themenstarter:in
69 Beiträge seit 2010
vor 13 Jahren

So, nochmal danke für die Hilfe, jetz funktioniert es.

eine Frage hätt ich noch, bei mir ist es nun so, das bestimmte Felder auch leer sein können, also keinen Wert enthalten.
Durch das Binding wird dann automatisch der Wert 0 zurückgegeben. wie kann ich das unterbinden?.

Gibt es da eine Einstellung / Funktion?
Oder muss ich mir mit einer Abfrage behelfen?

:::

S
341 Beiträge seit 2008
vor 13 Jahren

Servus,

wenn der wert bei dem nichts drin steht bzw den du nicht befüllt hast wird der standard wert benutzt. das ist bei einem Int natürlich 0 und bei einem String null.
Um gehen... hmmm fällt mir spontan keine praktische lösung ein aber es geht mit sicherheit da beim binding soweit ich weiß die toString methode aufgerufen wird.
Eine Einstellung kenn ich spontan auch keine aber vllt die anderen.

gruß

**Nur die Kenner können mit 10 Fingern bis 1023 zählen !!**
private int Main()
{
   string programmingSkills = getMySkills("programming")
   return = 1;
}
ScoobyDoh! Themenstarter:in
69 Beiträge seit 2010
vor 13 Jahren

Hallihallo,

ich meld mich nochmal zurück und zwar hab ich noch ein paar verständnisfragen die sich mir noch nicht ganz geklärt haben.

  1. DataBinding an die Textpropertie von Textboxen möglich?

  2. Ich möchte nun in meine Texblöcke z.B. einen Festen Text angeben und dahinter die vom Databinding eingefügten Daten haben.

also z.B. sowas (nur zur verdeutlichung)

<TextBlock Text="Ortschaft: {Binding Path=Ort}"

:::

T
8 Beiträge seit 2007
vor 13 Jahren

Hi,

  1. Ja, du kannst an die Text-Property von der TextBox binden

  2. Eine Mischung von statischem Text und Binding im Markup ist nicht möglich. Stattdessen würde ich ein zusätzliches Label für den Text "Ortschaft:" definieren:

<StackPanel>
    <Label Content="Ortschaft:"/>
    <TextBlock Text="{Binding Ort}" Margin="10,0,0,0"/>
</StackPanel>

Ein andere Möglichkeit wäre, einen Converter zu schreiben, der dir den Text zusammenbaut. Beispiel siehe hier:
http://www.codeproject.com/KB/WPF/MvvmDynamicCommands.aspx

Gruß, toolsche