2013-03-20 4 views
16

я получил статический класс вроде следующий:XAML привязка к статическому методу с параметрами

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

Теперь я хочу, чтобы получить доступ к этой функции статической в ​​XAML как связывание. Есть такой способ, например:

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

Или необходимо создать ObjectDataProvider для каждого возможного параметра?

Надеюсь, кто-то может мне помочь. Заранее спасибо!

+0

Не могли бы вы создать конвертер или форматировать строку, например. Content = "{Binding Path = MyValue, StringFormat = Вы искали {0}}" />? – Alyce

+0

string.Format был всего лишь примером вывода. Уточнит вопрос. – Gerrit

ответ

2

Правильный путь - перейти к маршруту objectdataprovider. Хотя, если вы просто привязываетесь к тексту, а не используете ярлык, я бы использовал текстовый блок.

<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

Спасибо за ответ, но этот подход означал бы, что я должен создать собственный ObjectDataProvider для каждого другого параметра. Или можно изменить параметр ObjectDataProvider через инструкцию привязки? Например: Gerrit

+0

Да, вы можете связать с параметром, обновите его в нескольких. – TYY

+0

Глядя на msdn, связывающий единственный способ, с которым мое предложение будет работать, - это если метод MethodParameters был связан с чем-то, что указывало значение. Поэтому я думаю, что мой ответ может быть не тем, что вы ищете. http://weblogs.asp.net/psheriff/archive/2010/02/23/bind-objectdataprovider-method-parameters-in-wpf.aspx – TYY

14

Получаю эту потребность. Я «решил» с помощью конвертера (например, предложенный here).

Во-первых, создать конвертер, который вернуть переведенную строку:

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(); 
    } 
} 

затем использовать его в XAML:

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

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

С уважением.