2013-03-20 9 views
16

ho avuto una classe statica come il seguente:XAML legano al metodo statico con i parametri

public static class Lang 
{ 
    public static string GetString(string name) 
    { 
     //CODE 
    } 
} 

Ora voglio accedere a questa funzione statica all'interno di XAML come vincolante. Esiste un modo per esempio:

<Label Content="{Binding Path="{x:static lang:Lang.GetString, Parameters={parameter1}}"/> 

O è necessario creare un ObjectDataProvider per ogni parametro possibile?

Spero che qualcuno sia in grado di aiutarmi. Grazie in anticipo!

+0

Impossibile creare un convertitore o formattare la stringa, ad es. Content = "{Binding Path = MyValue, StringFormat = Hai cercato {0}}" />? – Alyce

+0

la stringa.Formato era solo un esempio di output. Will Clearify la domanda. – Gerrit

risposta

2

Il modo corretto sarebbe quello di percorrere l'itinerario objectdataprovider. Sebbene tu stia semplicemente legando il testo piuttosto che usare un'etichetta, utilizzerei un blocco di testo.

<ObjectDataProvider x:Key="yourStaticData" 
       ObjectType="{x:Type lang:Lang}" 
       MethodName="GetString" > 
       <ObjectDataProvider.MethodParameters> 
        <s:String>Parameter1</s:String> 
       </ObjectDataProvider.MethodParameters> 
</ObjectDataProvider> 

<TextBlock Text={Binding Source={StaticResource yourStaticData}}/> 
+0

Grazie per la risposta, ma questo approccio significherebbe che devo creare un ObjectDataProvider per ogni parametro diverso. O è possibile modificare il parametro ObjectDataProvider tramite l'istruzione di associazione? Ad esempio: Gerrit

+0

Sì, è possibile eseguire il bind al parametro verrà aggiornato in pochi. – TYY

+0

Guardando il msdn che collega l'unico modo in cui il mio suggerimento avrebbe funzionato è se il MethodParameters fosse legato a qualcosa che ha specificato il valore. Quindi penso che la mia risposta potrebbe non essere quello che stai cercando. http://weblogs.asp.net/psheriff/archive/2010/02/23/bind-objectdataprovider-method-parameters-in-wpf.aspx – TYY

14

Anche io ho bisogno di questo. Ho "risolto" utilizzando un convertitore (come suggerito here).

Innanzitutto, creare un convertitore che restituisce la stringa tradotta:

public class LanguageConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
    if (parameter == null) 
     return string.Empty; 

    if (parameter is string) 
     return Resources.ResourceManager.GetString((string)parameter); 
    else 
     return string.Empty; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
    throw new NotImplementedException(); 
    } 
} 

quindi utilizzare in XAML:

<Window.Resources> 
    <local:LanguageConverter x:Key="LangConverter" /> 
</Window.Resources> 

<Label Content="{Binding Converter={StaticResource LangConverter}, 
         ConverterParameter=ResourceKey}"/> 

saluti.

Problemi correlati