2016-06-08 14 views
0

Um ein wenig Kontext zu geben: In unserer Anwendung haben wir eine Reihe von Begriffen in einer Datenbank gespeichert. Wir beziehen unsere Begriffe intern mit einem Schlüssel, während unsere Kunden entscheiden, welcher Text stattdessen erscheinen soll. Dies hat für unsere Webanwendungen gut funktioniert.UWP- Wie gehe ich vor, wenn ich auf eine variable Zeichenkette in einer Datatemplate verweise?

Allerdings haben wir für unsere UWP-Anwendung in unseren DataTemplates Probleme bekommen. So wie ich es verstehe, Datenvorlagen arbeiten wie folgt aus:

<DataTemplate x:DataType="ObjectWithAllInformation"> 
    <Element Property={x:Bind PropertyOnAboveObject} /> 
</DataTemplate> 

Das Problem ist, dass wir etwas binden wollen, sind die außerhalb des Kontextes dieses spezifischen Objekt vorhanden ist. Wir wollen so etwas wie dies tun:

<DataTemplate x:DataType="ObjectWithAllInformation"> 
    <Textblock Text="{Some sort of binding to a global terms object?}" /> 
    <Element Property={x:Bind PropertyOnAboveObject} /> 
</DataTemplate> 

Gibt es eine Möglichkeit, eine solche globale Ressource zu instanziieren, die wir innerhalb der Datenvorlage auf diese Weise verweisen können? Etwas, das mir gerade in den Sinn gekommen ist, das ich noch nicht ausprobiert habe, ist, dass ein benutzerdefiniertes Benutzersteuerelement funktionieren könnte, aber es scheint übertrieben zu sein, auf einen String zuzugreifen. Gibt es einen einfachen Weg, dies zu erreichen?

+0

Hat UWP nicht '{x: Static}'? Kannst du diese "globale Ressource" nicht einfach in z.B. Ihre App.xaml? Nehmen wir an, es scheint, als ob Sie immer noch in der Lage sein sollten, z.B. ein Konverter oder, vielleicht besser, ein Proxy-View-Modellobjekt, das die "globalen" Daten über eine Instanzeigenschaft verfügbar macht, an die gebunden werden kann. Leider ist es nicht einmal so klar, wie diese anderen Daten aussehen, an die Sie sich binden möchten. Die Frage ist ohne eine gute [mcve] schwer zu verstehen, die deutlich zeigt, was Sie zu tun versuchen, und eine genauere Beschreibung dessen, was der Code jetzt tut und was er stattdessen tun soll. –

+0

Ich glaube nicht, dass es x: Static, aber es gibt ein StaticResourceExtension-Element, das ich an dieser Stelle nicht vollständig verstehe. Soweit ein Beispiel von dem, was ich will: Ich habe einen Schlüsselwert. Ich möchte in der Lage sein, diesen Schlüsselwert zu verwenden, um zur Laufzeit den passenden String aus der Datenbank zu erhalten (er kann zur Entwicklungszeit nicht bekannt sein, nur der Schlüssel ist bekannt). Ich möchte auf diese Zeichenfolge im Kontext eines DataTemplate zugreifen können. Die Verwendung eines Konverters mit meinem Schlüssel, der als Konverterparameter übergeben wurde, ist das, was ich morgen versuchen werde, obwohl ich um den asynchronen Datenzugriffsbereich herum arbeiten muss =) –

+0

Sieht so aus, als ob der Konverter funktioniert hat! Ich habe immer noch alle Arten von Fragen zur Effizienz (da der Konverter diese Suche ausführen wird, um die Zeichenfolge für jedes Element in meiner Liste zu erhalten, anstatt eine Zeichenfolge in die Vorlage zu übergeben und wiederzuverwenden), aber das funktioniert zur Zeit. –

Antwort

0

Sie könnten den Lokalisierungsmechanismus verwenden, wie in this quick-start präsentierten

Zusammengefasst würden Sie eine Ressourcen-Datei (.resw) in einem bekannten Ordner in Ihrer Lösung "Strings/Kultur-Code" schaffen - wo culture-code ist die Sprache Ihrer Ressourcen. Sie definieren die Strings dort und sie dann über die x Referenz: Uid Eigentum auf Ihrer TextBlock-

<DataTemplate x:DataType="ObjectWithAllInformation"> 
    <Textblock x:Uid="resource1" /> 
    <Element Property={x:Bind PropertyOnAboveObject} /> 
</DataTemplate> 

und die entsprechende Ressourcendatei

resource1.Text: "whatever static text you need to define" 

Hinweis haben würde, wenn Sie definieren die Ressource Sie die verwenden gleicher Wert, den Sie im Feld x: Uid verwendet haben, und setzen Sie ihm die Eigenschaft voran, die Sie mit diesem Wert festlegen müssen, in Ihrem Fall "Text". Sie können diesen Mechanismus verwenden, um bei Bedarf Werte für andere Eigenschaften festzulegen, z. B. Header, PlatzhalterText usw.

+0

Der Gedanke kam mir in den Sinn, aber es würde nicht funktionieren. Die überwiegende Mehrheit unserer Kunden befindet sich in einem englischen Gebietsschema, und diese Begriffe sind nach der Bereitstellungszeit clientdefiniert, nicht zur Entwicklungszeit vordefiniert.Grundsätzlich wird der Text dynamisch implementiert, und wir benötigen eine Möglichkeit, diesen dynamischen Text im Kontext eines DataTemplates zu referenzieren. –