Autor Beitrag
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 31.08.10 17:38 
Hallo liebe Gemeinde,

ich muss nun auch mal eine Frage zu einem Problem stellen und wäre für Hilfestellung sehr dankbar.

Also folgendes: Ich habe in einer Datenbank eine Lookup-Tabelle, die mithilfe des Entity Frameworks in eine Klasse gewandelt wird. Die Struktur ist wie folgt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
public class Lookup
{
  public Guid Id { get; set; }
  public string Context { get; set; }
  public string  Value { get; set; }
  public int Order { get; set; }
}

Also, es gibt in der Tabelle verschiedene Contexte, einer davon ist z.B. Sex (also Geschlecht)
Die Values sind dann die versch. Arten des Geschlechtes, und die Order ist einfach nur die Reihenfolge bei der Anzeige. Die Id ist der Primärschlüssel.

So, nun gibt es noch eine Tabelle Person, die Struktur ist in etwa wie folgt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
public class Person
{
  public string Name { get; set; }
  public string LastName { get; set; }
  public Guid IdSex { get; set; }
  public Guid IdType { get; set; }
  ...
}


So, dabei spiegelt also IdSex den Wert aus der Lookuptabelle mit der Id und dem Context "Sex" wieder. Und IdType einen anderen Wert unter einem anderen Context.
Ich hoffe, dass man das soweit versteht.

Nun zu eigentlichen Problem:
In der Benutzeroberfläche sollen die versch. Lookupwerte der versch. Contexte in Comboboxen dargestellt werden.
Dazu habe ich einen IValueConverter, dem ich den Context übergebe, und der mir dann alle Lookupwerte dazu zurückliefert. Die Anzeige klappt schon.

Aus einer Liste von Personen wird eine ausgewählt. Nun soll das SelectedItem der ComboBox natürlich auf den richtigen Lookupwert gesetzt werden, sowie bei Veränderung des SelectedItems auch die Id bei der Person neu gesetzt werden. Und genau hier ist das Problem. Denn das SelectedItem, was ich binde, ist ein Objekt vom Typ Lookup, und die Id ist eben ein Guid. Bin ziemlich am verzweifeln. Aber die Lösung ist bestimmt ganz leicht...

Bin jedem dankbar, der sich den Roman durchgelesen hat, und mir vielleicht auch noch helfen kann!

Marko
Trashkid2000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 01.09.10 08:45 
Hat sich erledigt.

Habe jemanden auf Arbeit gefragt, der sich damit auskennt.

Marko
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 01.09.10 09:10 
Dann poste die Lösung doch bitte hier, dann haben alle was davon ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Trashkid2000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 01.09.10 15:58 
Natürlich. Hätte ich auch noch gemacht.
Also, hatte den Tip mit der Property "SelectedValuePath" der ComboBox erhalten, dadurch ist jetzt das Binding problemlos möglich.
ausblenden C#-Quelltext
1:
2:
3:
ItemsSource="{Binding Source={x:Static local:Facade.Instance}, Path=GeneralLookupData, Converter={StaticResource generalLookupValueConverter}, ConverterParameter=sex}"
SelectedValue="{Binding Path=IdSex}"
SelectedValuePath="Id">


Zur kurzen Erlärung:

Facade.Instance ist eine Singleton-Instance der Klasse Facade. Diese besitzt die Property "GeneralLookupData", die ein IEnumerable<Lookup> zurückliefert.

generalLookupValueConverter ist der Converter, der als Übergabeparameter den Context "sex" übergeben wird.
Als SelectedValue wird also an IdSex der Person gebunden.
Und der SelectedValuePath wird auf Id gesetzt, das ist der Primärschlüssel der Loopup-Werte.

LG, Marko
IsNull
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 97
Erhaltene Danke: 11


VS 2010, C#, AHK
BeitragVerfasst: Fr 28.01.11 19:32 
Alternativ könntest du nach dem MVVM Pattern auch ViewModels für deine anzuzeigenden Daten schreiben, die dann eben View-Freundlich Properties exportieren die du dann unbekümmert binden kannst.