none
Zugriff und Mergen von Ressourcen RRS feed

  • Frage

  • Hallo Allerseits,

      ich habe hier ein kleines Problem bei dem ich gerne die dahinterliegenden Mechanismen verstehen würde.

    In den Ressourcen meiner Applikation (*.exe) lege ich einen XML-DatenProvider an
    <XmlDataProvider x:Key="LayoutStore" XPath="/"/>

    Zum Start der Anwendung greife ich nochmal darauf zu und belege das Dokument des Providers
    XmlDataProvider xdp = Resources["LayoutStore"] as XmlDataProvider;
    if (xdp != null)
    {
       xdp.Document = xmlLayoutStore;
    }


    A) Weiterhin lädt die Exe noch eine Dll, deren XAML in die Ressourcen der Exe gemerged wird. Nun können auch die Ressourcen der Dll auf den XML-Datenprovider zugreifen.
    Teilweise werden aber beim Zugriff auf den Datenprovider Fehler im Dll-Teil gemeldet.

    System.Windows.Data Error: 43 : BindingExpression with XPath cannot bind to non-XML object.; XPath='LayoutStore/Assembly[@Name='GMPlugin']/VCSEditor' BindingExpression:Path=/InnerText; DataItem='XmlDataCollection' (HashCode=15409429); target element is 'CheckBox' (Name=''); target property is 'IsChecked' (type 'Nullable`1') XmlDataCollection:'MS.Internal.Data.XmlDataCollection'

    Die XPath existieren aber definitiv, und der Fehler tritt nur bei wenigen Datenbindungen auf, und auch erst beim Abräumen der Visuellen Elemente. Ansonsten funktioniert auch dort die Datenbindung wie gewünscht.

    Ich habe hier den Eindruck, da der XML-Datenprovider asynchron arbeitet, erfolgt der Zugriff aus dem Dll-Teil nicht synchonisiert. Aber auch ein Setzen von IsAsynchronous="False" bringt hier nichts.

    B) Auch aus der Dll kann ich im Code (in dem Fall aus einer statischen Klasse) auf die Ressourcen zugreifen
    XmlDataProvider xdp = Application.Current.Resources["LayoutStore"] as XmlDataProvider;
    if (xdp != null)
    {
       xdp.Document ...........
    }

    Hier kann es aber passieren, dass man einen Fehler bekommt, derart wie "auf das Objekt eines anderen Threads kann nicht zugegriffen werden"


    C) Legt man auch einen gleichnamigen XMLDatenprovider in den DLL-Ressourcen an
    <XmlDataProvider x:Key="LayoutStore" XPath="/"/>
    hat man den Eindruck, das nun zwei XML-Datenprovider angelegt werden, allerdingts wird kein Fehler aufgrund der gleichen Namen gemeldet.
    Exe und Dll scheinen aber jeweils "ihren eigenen" XML-Datenprovider zu verwenden

    Für hilfreiche Ideen, Kommentare wäre ich dankbar.


    Mit besten Grüßen
    Roy


    Donnerstag, 14. Mai 2009 12:36

Alle Antworten