2010-06-15 6 views
5

Ich versuche, eine benutzerdefinierte MarkupExtension zu schreiben, um mein Leben einfacher zu machen, indem Sie mir eine bessere Möglichkeit geben, Bindungen in XAML anzugeben. Ich möchte jedoch wissen, ob ich auf das Objekt zugreifen kann, das die Datei MarkupExtension in verwendet wird.Zugreifen auf "aktuelle Klasse" von WPF benutzerdefinierte MarkupExtension

Mit anderen Worten angenommen, ich habe eine UserControl, die eine bestimmte Wiedergabe eines Datenmodells meiner definiert Programm. Dieses Steuerelement enthält viele visuelle Elemente wie Raster, Rahmen und allgemeines Layout. Wenn ich meine MarkupExtension auf einer bestimmten Eigenschaft von einem Element in dieser UserControl verwenden, möchte ich die Instanz des UserControl zugreifen zu können, ohne zu wissen, welche Art es ist (ich plane Reflexion über die Verwendung).

Ist das überhaupt möglich?

Antwort

11

In .NET 4.0 fügten sie die IRootObjectProvider Fähigkeit hinzu, aber leider ist es in früheren Versionen nicht möglich. Wenn Sie in .NET 4.0 sind, können Sie Folgendes tun:

public override object ProvideValue(IServiceProvider serviceProvider) 
{ 
    var rootObjectProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider; 
    var root = rootObjectProvider.RootObject; 
    // do whatever you need to do here 
} 
+0

Ich * bin * mit .NET 4! Lemme es ausprobieren. :) – devios1

+0

Funktioniert perfekt! Vielen Dank! – devios1

+0

Kein anderer Weg für uns, fest in 3.5 ?! :.. (((((((((( –

Verwandte Themen