Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Designproblem bei DataBinding
antoschka
myCSharp.de - Member



Dabei seit:
Beiträge: 371

Themenstarter:

Designproblem bei DataBinding

beantworten | zitieren | melden

Hallo,

ich suche Rat wie ich eine Anforderung am besten lösen könnte. Folgendes Problem:
Ich habe zwei Klassen:

ClassA
{

public string Name{get; set;}

private List<ClassB> AttributCollection{get; set;}
}

ClassB
{
public int Id{get; set;}
public string Type{get; set;}
public string ValueString{get; set;}
}
Eine Collection von ClassA wird an einen GridView gebunden und in einer Spalte soll das Property Name angezeigt werden.

Name ist allerding nur als Property in ClassA enthalten, der Wert ermittelt sich aus dem ValueString eines bestimmten Element der AttributCollection (z.B. dem Element bei dem Type == "Name" ist).

Spontan sind mir zwei Lösungswege eingefallen die beide nicht so dolle sind.

1.
im getter von Name rufe ich ein Methode auf:

string getName()
{
AttributCollection.Find(ac=> string.Equals(ac.Type,"Name")).ValueString;
}
=> Performancesorgen!!!!

2.
ValueString wird um ein event "ValueStringChanged" erweitert und ClassA bindet sich an das Event des einzelnen Element in der AttributCollection. Wertänderungen in der Instanz von Class B würden in eine lokales Feld "name" übernommen. Das wäre glaueb ich ziemlich performant, da die Daten zum Zeitpunkt des Zugriffs bereits verfügbar sind.

hier gibt’s zwei Probleme:
- teilweise bekomme ich die ClassA instanzen und müsste bei jeder schauen ob das Element schon da ist => dann würde ich auf Veränderungen des Elements lauschen; wenn es nicht da ist müsste ich acht geben wenn es hinzugefügt wird und mich dann dran binden
- Ob die Instanz von ClassB in der Collection das gesuchte ist, hängt noch von anderen Eigenschaften der Instanz ab (in Wahrheit gibt es noch mehr), wenn diese sich ändern müsste ClassA ebenfalls informiert werden

Fällt Euch eine elegantere Lösung ein.

besten Dank

antoschka
private Nachricht | Beiträge des Benutzers
JuyJuka
myCSharp.de - Experte

Avatar #avatar-2316.jpg


Dabei seit:
Beiträge: 2.187
Herkunft: Deutschland

beantworten | zitieren | melden

Hallo antoschka,

Das ganze per Observer-Pattern zu lösen ist möglich.
Dazu solltest du deine List<> gegen eine BindingList<> oder ObservableList<> (ka, wie die genau heißt, benutze .Net2.0) austauschen, da diese ein Event auslöst wenn ein Element entfernt oder hinzugefügt wird. Dann muss die Klasse in der Auflistung noch INotifyPropertyChanged implementieren. So kannst du die Liste sicher überwachen.

Gegen die Lösung mit dem Find ist aber auch okey, man sollte es halt noch optimieren.
- keine Delegaten
- sortierte List<> oder ein Dictionary<,> mit dem Type-String als Key.

Gruß
Juy Juka
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von JuyJuka am .
private Nachricht | Beiträge des Benutzers