Entwickler-Ecke
WPF / Silverlight - Enumeration an WPF Combobox binden mit ObjectDataProvider
Oppi35 - Do 30.12.10 16:48
Titel: Enumeration an WPF Combobox binden mit ObjectDataProvider
Hallo Zusammen,
wenn ich die hier genannte Enumeration (TestEnumeration) im Namespace, aber nicht innerhalb einer Klasse definiere, funktioniert alles super. Definiere ich die Enumeration aber innerhalb einer Klasse (class Testclass) bekomme ich keinen gültigen Verweis hin. Habe bereits folg. probiert:
- Type="mapping:Testclass.TestEnumeration"
- Type="mapping:Testclass+TestEnumeration"
Kann mir hier jemand weiterhelfen?
Die Enumeration sieht wie folgt aus:
public enum Testenumeration { a,b,c }
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| <Window x:Class="Aktionen_Druckdatensatz.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mapping="clr-namespace:Druckdatensatz_dll;assembly=Druckdatensatz_dll" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:Aktionen_Druckdatensatz" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <ObjectDataProvider x:Key="enumcombo" MethodName="GetNames" ObjectType="{x:Type sys:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type Type="mapping:TestEnumeration" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Window.Resources> |
Gruß Frank
Kha - Do 30.12.10 16:59
XAML unterstützt keine Angabe von Nested Types. Abgesehen davon habe ich den ObjectDataProvider noch nie benutzt, im Code Behind zu binden ist dann doch ein wenig flexibler und unschwurbeliger ;) .
Trashkid2000 - Do 30.12.10 18:32
Hallo,
sieht so aus, als ob nur XAML und der Designer damit Probleme hätten, denn laufen tut es ja mit dem "+" zwischen Kalssennamen und Enum. Habe das mal auf stackoverflow
http://stackoverflow.com/questions/1220196/wpf-binding-a-combobox-to-an-enum-nested-in-a-class gefunden:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| <Window.Resources> <ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="TestValues"> <ObjectDataProvider.MethodParameters> <w:Type2 TypeName="w:Test+TestEnum" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Window.Resources> |
Was das "Type2" ist, weiss ich allerdings nicht. Entweder, es ist eine Selbstimplementierung, oder bei .NET 4.0 mit dabei.
Marko
Oppi35 - Fr 31.12.10 00:12
Hallo Zusammen,
vielen Dank erstmal für Eure Hilfe.
Marko, ich verstehe hier zwar auch noch nicht alles, aber zu Deiner Frage bzgl. Type2 kann ich Dir folg. sagen:
Es wurde in Deinem Link eine Klasse Type2Extension erstellt, die von TypeExtension abgeleitet ist.
Bei der Verwendung des Befehls "w:Type2" wird nach der Klasse Type2 gesucht. Wird die Klasse nicht gefunden, wird automatisch "Extension" hinten angehängt und erneut gesucht. Wie dies funktioniert weiß ich noch nicht, steht aber in meinem WPF Buch. Also wird nach der hier erstellten Klasse Type2Extension gesucht (und gefunden).
Genauere Zusammenhänge kann ich Dir leider noch nicht erläutern:)
Ich werde jetzt einfach meine Enumerationen außerhalb der Klassen deklarieren. Dann klappts mit XAML und auch dem Designer und meine ComboBox ist gefüllt.
Also nochmal vielen Dank und einen guten Rutsch!!!
Gruß Frank
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!