List unbekannten Typs per Reflection erstellen?

16/03/2010 - 13:10 von Sebastian | Report spam
Hallo,

ich habe ein BasisDialogfenster, in dem ich zwei Datagrids habe. Vom ersten
Datagrid möchte ich die selektierten Zeilen (Items) in das zweite Datagrid
kopieren. Mein Problem ist nun, dass ich aber dort nicht weiß, welche
Datenklasse benutzt wird, sprich welcher Typ. Da das Fenster ein
allgemeingehaltenes Fenster sein soll.

Hier ist ein Ausschnitt, wie es machen würde, wenn der Typ der Datenklasse
bekannt wàre:

public virtual void btnSelect_Click(object sender,
System.Windows.RoutedEventArgs e)
{
List<SomeList> lstDestination = new List<SomeList>
SomeList item = this.SourceDataGrid.SelectedItem as SomeList;
lstDestination.Add(item);
this.DestinationDataGrid.ItemsSource = null;
this.DestinationDataGrid.ItemsSource = lstDestination;
}

Wie müsste ich diese 5 Zeilen umschreiben, wenn ich das ganze per Reflection
realisieren würde?
Den Typ der Liste könnte ich mit

Type t = DataGridSource.ItemsSource.GetType();

herausbekommen, aber wie kann man per Reflection eine neue Liste dieses Typs
erstellen?

Vielen Dank schonmal im Voraus

MfG
Sebastian
 

Lesen sie die antworten

#1 Marvin Massih
16/03/2010 - 13:57 | Warnen spam
Hallo Sebastian,

Sebastian schrieb:
ich habe ein BasisDialogfenster, in dem ich zwei Datagrids habe. Vom
ersten Datagrid möchte ich die selektierten Zeilen (Items) in das zweite
Datagrid kopieren. Mein Problem ist nun, dass ich aber dort nicht weiß,
welche Datenklasse benutzt wird, sprich welcher Typ. Da das Fenster ein
allgemeingehaltenes Fenster sein soll.



Falls Du tatsàchlich nicht mit nicht-generischen Schnittstellen wie
IList, ICollection o.à. arbeiten kannst (was die bessere Lösung wàre),
sollte es so funktionieren (ungetestet):

public virtual void btnSelect_Click(object sender,
System.Windows.RoutedEventArgs e)
{
object selectedItem = this.SourceDataGrid.SelectedItem;
Type t = selectedItem.GetType( );
Type listType = typeof( List<> ).MakeGenericType( new[] { t } );
object lstDestination = Activator.CreateInstance( listType );
lstDestination.Add( selectedItem );
this.DestinationDataGrid.ItemsSource = null;
this.DestinationDataGrid.ItemsSource = lstDestination;
}

Weitere Infos:

[ Type.MakeGenericType-Methode ]
http://msdn.microsoft.com/de-de/lib...ctype.aspx

[ Activator.CreateInstance-Methode (Type) ]
http://msdn.microsoft.com/de-de/lib...80%29.aspx

Viele Grüße

Marvin

Marvin Massih | http://www.marvin-massih.de

Ähnliche fragen