2009-07-31 10 views
1

Ich habe eine WPF-Anwendung, die IronPython als Skriptsprache einbettet. Ich habe ein Objektmodell, mit dem IronPython-Skripte "Zeug" machen können.Eingebettete IronPython-Skripte und Konvertierungstypen

Allerdings bin ich auf ein seltsames Problem gestoßen, das ich in einer Weise gelöst habe, die ich glaube nicht richtig ist.

In meinem Skript möchte ich Folgendes eingeben, um den Speicherort eines Objekts in WPF festzulegen.

Dies kommt mit einer Ausnahme, die besagt, dass es nicht von PythonTuple zu System.Windows.Point konvertieren kann.

Ich habe zur Zeit das mit einem benutzerdefinierten Typ-Konverter in meinem C# -Objekt gelöst, aber ich bin mir nicht sicher, ob dies der beste Weg ist, es zu tun.

Gibt es eine Möglichkeit, IronPython oder .Net im Allgemeinen zu erklären, wie man von einem Typ in einen anderen konvertiert, der zur Laufzeit erweitert werden kann?

Antwort

2

Die Art und Weise nicht tun Ich tue dies TypeDescriptor zu verwenden ist, eine Art Konverter Attribut PythonTuple zur Laufzeit hinzuzufügen.

TypeDescriptor.AddAttributes(typeof(PythonTuple), 
    new TypeConverterAttribute(typeof(Converter))); 

Dann benutze ich den folgenden Code den Konverter in dem Attribut Setter (SetMemberAfter Methode)

var converter = TypeDescriptor.GetConverter(value); 
if (converter.CanConvertTo(destinationType)) 
{ 
    var destinationValue = converter.ConvertTo(value, destinationType); 
    return destinationValue; 
} 
else 
{ 
    throw new InvalidOperationException("Cannot convert from {0} to {1}".UIFormat(
     value == null ? "null" : value.GetType().Name, destinationType.Name)); 
} 
0

Warum ein

map.CanvasLocation = Point(10,10) 
+0

ich tun könnte, zu finden. Dies würde funktionieren, aber es ist auch nicht sehr benutzerfreundlich. Ich möchte die Skripts so einfach wie möglich verwenden. –