XAML привязывается к статическому методу с параметрами - программирование
Подтвердить что ты не робот

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 для каждого возможного параметра?

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

4b9b3361

Ответ 1

Я тоже получаю эту потребность. Я "решил" с помощью конвертера (например, предлагаемого здесь).

Сначала создайте конвертер, который возвращает переведенную строку:

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}"/>

С уважением.

Ответ 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}}/>