Autor Beitrag
Schafschaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 63
Erhaltene Danke: 2

Windows 10
C# (VS 2015)
BeitragVerfasst: Fr 11.09.15 13:02 
Hallo,

ich habe mal wieder ne Frage^^

Wenn ich ein Objekt habe mit ein Paar Eigenschaften z.B. Mitarbeiter hat Name.
Jetzt habe ich eine Liste von Mitarbeitern.
Wie komme ich direkt an eine Liste<string> von den Namen, ohne mir erst eine Liste<string> anzulegen und
mit Schleifen durchzulaufen?
Es geht nämlich um die Darstellung in einer ComboBox.
Da wollte ich als Itemssource die Namen der Mitarbeiter nehmen und wenn einer ausgewählt ist dann wieder zurück auf das Mitarbeiter Objekt
um damit weiterarbeiten zu können.

Bin dankbar um jeden Rat :)

LG Schafschaf
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 11.09.15 14:09 
Du bindest einfach die Liste der Mitarbeiter an die ComboBox und nicht eine künstliche davon extrahierte Liste der Namen der Mitarbeiter. Dann sagst du der ComboBox nur noch welche Property des gebunden Objektes du gerne in der Auswahlliste sehen möchtest und eventl. welches im TextBoxanteil der ComboBox angezeigt werden soll, hier z.B. der Name. Wie das konkret geht hängt von der benutzen UI Technik ab. Es ist aber nirgendwo nötig ein blödes hin und her mappen zu programmiern wie du es beschreibst.
Schafschaf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 63
Erhaltene Danke: 2

Windows 10
C# (VS 2015)
BeitragVerfasst: Mi 16.09.15 11:28 
Oh, ja da hast wohl recht.
Ich werd noch wahnsinnig mit XAML.
Im C# Code funktioniert das wunderbar. Im XAML mit Data Binding wills einfach net klappen. Als DataContext gebe ich eine Klasse im ViewModel an, die eine Liste beinhaltet an die es sich binden soll. Die Liste will er einfach nicht kennen :(
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 16.09.15 12:53 
WPF ist jetzt nicht gerade meine Kernkompetenz aber damit dir jemand helfen kann müßtest du schon zeigen was du hast.
Schafschaf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 63
Erhaltene Danke: 2

Windows 10
C# (VS 2015)
BeitragVerfasst: Mi 16.09.15 15:32 
Es geht nicht um WPF, sondern um UWP. Aber vom XAML her macht das doch keinen großen unterschied denke ich.
Ich habe eine Combobox. an diese ich jetzt (wie du gesagt hast) über C# die Liste<Mitarbeiter> gebunden habe und mit
der Eigenschaft DisplayMenberPath="Name" wird dann die Namensproperty angezeigt.
Jetzt möchte ich aber ID und Name in der Combobox stehen haben oder will ein GridView mit Kacheln füllen.
Da brauche ich dann ein Template was ich im XAML definieren muss.
Im XAML Kann ich auch Objekte binden und muss da einen DataContext festlegen, das versteh ich irgendwie nicht.
Ich habe schon einen DataContext festgelegt und mit ItemsSource die Liste drangebunden aber es zeigt mir nix an.

ausblenden XML-Daten
1:
<ComboBox x:Name="comboBoxMitarbeiter" HorizontalAlignment="Left" Margin="134,177,0,0" VerticalAlignment="Top" Width="296" DataContext="{?????}" ItemsSource="{Binding ?????}"/>					
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mi 16.09.15 19:54 
Ja, das Thema ist nicht ganz einfach. Ich empfehle hier gerne die Video-Tutorials aus der MSVA: www.microsoftvirtual...lend-jump-start-8260

Der Datacontext ist normalerweise im Window oder im Frame (also dem "Hauptelement") und von der Klasse deines Viewmodels:
ausblenden XML-Daten
1:
2:
3:
  <Window.DataContext>
    <test3:PersonVM />
  </Window.DataContext>

Oder auch
    <ViewModels:DetailPageViewModel />
(Namespace besser benannt)

Das ViewModel sei mal einfach gehalten:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
namespace Test_3
{
  class Person
  {
    public string Firstname { get; set; }
    public string Lastname { get; set; }
  }

  class PersonVM : BindableBase
  {
    public virtual ObservableCollection<Person> Persons { get; set; }

    public PersonVM()
    {
      Persons = new ObservableCollection<Person>();
    }
  }
}

Die Combobox bindet an die Collection:
ausblenden XML-Daten
1:
<ComboBox HorizontalAlignment="Left" Margin="208,42,0,0" VerticalAlignment="Top" Width="165" ItemsSource="{Binding Persons}"/>					

Dann weist du (irgendwo) deinem Datacontext etwas zu:
ausblenden C#-Quelltext
1:
2:
    (this.DataContext as PersonVM).Persons.Add(new Person { Firstname = "AA", Lastname = "BB" });
    (this.DataContext as PersonVM).Persons.Add(new Person { Firstname = "12", Lastname = "34" });


Und schon hast du in der Combobox eine Auflistung von zwei "Test_3.Person". Das zu verschönern ist Aufgabe eines ItemTemplates, das sich bspw. mit Blend sehr komfortabel editieren lässt.

Für diesen Beitrag haben gedankt: Schafschaf
Schafschaf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 63
Erhaltene Danke: 2

Windows 10
C# (VS 2015)
BeitragVerfasst: Do 17.09.15 15:28 
Vielen Dank für die Antwort, ich werd das mal so ausprobieren wenn mein blöder Dienst wieder funktioniert :)
Schafschaf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 63
Erhaltene Danke: 2

Windows 10
C# (VS 2015)
BeitragVerfasst: Do 24.09.15 14:46 
@jfheinz

Mittlerweile hab ich das verstanden. Danke nochmal für dein Beispiel, hat mir sehr geholfen.
Einfache Objekte oder Listen binden geht mittlerweile ganz gut, nur habe ich das Problem, dass ich Daten aus einem WCF Dienst bekomme und
die Aufrufe geschehen daher asynchron. Bei async sieht man im XAML gar nix :(