myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Wie ein DependencyProperty entwickeln, das eine generische ObservableCollection akzeptiert?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie ein DependencyProperty entwickeln, das eine generische ObservableCollection akzeptiert?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
NOFX
myCSharp.de-Mitglied

Dabei seit: 04.12.2015
Beiträge: 42


NOFX ist offline

Wie ein DependencyProperty entwickeln, das eine generische ObservableCollection akzeptiert?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi, ich hoffe ihr könnt mir bei meinem Problem helfen:

Wir entwickeln gerade ein UserControl, dass eine ObservableCollection einer beliebigen Klasse als DP bekommt und zugehörig dazu - ebenfalls als DP - eine Liste, welche Properties (als Strings) der Klassenobjekte jeweils dargestellt werden sollen.

Das Problem, dass wir jetzt haben, wie die DP gestaltet sein soll, um alle verschiedenen Klassen zu akzeptieren. Wir nutzenaktuell ein object, dass dann in eine ObservableCollection gecastet werden muss und verzweifeln da gerade dran.

C#-Code:
        public object Data
        {
            get { return ((object)GetValue(DataProperty)); }
            set { SetValue(DataProperty, value); }
        }

        public static readonly DependencyProperty DataProperty =
            DependencyProperty.Register("Data", typeof(object), typeof(TestControl), new PropertyMetadata(null, new PropertyChangedCallback(DataChanged)));

        private static void DataChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var tmp = ((TestControl)d).Data;
        }

Gibt es dafür eine einfache Lösung oder macht eine ganz andere Herangehensweise?
20.07.2020 16:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
KroaX KroaX ist männlich
myCSharp.de-Mitglied

avatar-4080.jpg


Dabei seit: 31.08.2009
Beiträge: 301
Herkunft: Köln


KroaX ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Warum braucht ihr an dieser Stelle hier den konkreten Typ ObservableCollection<T> ? Reicht euch ggf. auch das INotifyCollectionChanged als Interface ggf. in Kombination mit ICollection / IList?

Warum benötigt ihr Zugriff auf den konkreten Typen? Reicht euch ggf. nicht einfach davon auszugehen, dass Data eine IList ist ( wohlgemerkt ohne den generic Type ). Ihr könntet dann über Reflection den Generic Type der IList ermitteln und dann ebenfalls über reflection eure Properties ermitteln.

C#-Code:
  public static Type GetGenericTypeDefinitionOfIEnumerable(this Type enumerable)
        {
            return enumerable.GetInterfaces().Where(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IEnumerable<>))
                .SelectMany(t => t.GetGenericArguments()).First();
        }
20.07.2020 16:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
NOFX
myCSharp.de-Mitglied

Dabei seit: 04.12.2015
Beiträge: 42

Themenstarter Thema begonnen von NOFX

NOFX ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi, danke für die schnelle Antwort. Die Klasse und als welche Collection oder List es gecastet wird, ist eigentlich egal. Hauptsache wird kommen auf die einzelnen Objekte und können über den Property-Namen auf die Werte der einzelnen Felder zugreifen.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von NOFX am 20.07.2020 17:34.

20.07.2020 17:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 6 Monate.
Der letzte Beitrag ist älter als 6 Monate.
Antwort erstellen


© Copyright 2003-2021 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 25.01.2021 14:40