2010-07-07 16 views
7

Abbiamo un sistema dinamico di linguaggi che non usa i file di risorse convenzionali; recupero di risorse da un database, tramite una libreria di gestione del linguaggio. Basato su una soluzione legacy (VB6), controlla i linguaggi in base al nome della risorsa nella proprietà del tag del controllo. Dopo che la pagina è stata inizializzata, spariamo a un metodo che richiede LayoutRoot e ricorre ai suoi figli che applicano le stringhe cercate dal tag in cui il controllo ne ha uno. Questo dimostra di essere poco maneggevole, la routine ricorsiva si è trasformata in un mostro per soddisfare le sottigliezze dei diversi controlli e voglio usare l'associazione dati per applicare le stringhe.È possibile associare dati a un metodo in Silverlight?

Mi rendo conto che potrei dichiarare proprietà da associare a ciascun controllo, ma questo implicherà molto codice e spero che esista un modo migliore. C'è un modo per legarsi a un metodo, passando un parametro. Immagino un metodo come questo.

public string GetResource(string resourceName) 
{ 
    string resource = <fetch resource from language manager>; 

    if (String.IsNullOrEmpty(resource)) 
    { 
    return resourceName; 
    } 
    else 
    { 
    return resource; 
    } 
} 

Abbiamo già un metodo statico nella nostra applicazione per questo recupero, che ha la seguente firma.

public static Resource(string resourceName, string defaultValue) 

Essere in grado di utilizzarlo direttamente sarebbe fantastico.

+2

Hai appena usato "lingua" come verbo? * shudder * –

+0

Ho fatto e lo riconosco come un uso improprio della lingua. Quale verbo vorresti raccomandare? Traduci non sembra giusto per quello che sto descrivendo. –

+0

"inizializza", "traduce", "applica risorse a" –

risposta

4

È possibile utilizzare uno value converter e quindi passare un parametro a quello per cercare le risorse. Non importa necessariamente quale proprietà è stata assegnata alla binding, in quanto il tuo convertitore di valori potrebbe ignorare quella parte e utilizzare semplicemente il passaggio ConverterParameter per eseguire la ricerca delle risorse.

È quindi possibile creare un'istanza del convertitore di risorse nelle risorse App e utilizzarla nell'intera applicazione.

... SomeProperty="{Binding Converter={StaticResource MyAppResourceConverter}, 
          ConverterParameter=SomePropertyResourceName}}" ... 
+1

Funziona abbastanza bene, grazie. –

+0

@Steve: nessun problema. Ho dovuto fare qualcosa di simile (non risorse però) e sono incappato in questo approccio sfacciato. :) –

Problemi correlati