XAML使用参数绑定到静态方法

Ger*_*rit 16 c# wpf xaml

我有一个像下面这样的静态类:

public static class Lang
{
   public static string GetString(string name)
   {
      //CODE
   }
}
Run Code Online (Sandbox Code Playgroud)

现在我想在xaml中访问这个静态函数作为绑定.有没有这样的方式,例如:

<Label Content="{Binding Path="{x:static lang:Lang.GetString, Parameters={parameter1}}"/>
Run Code Online (Sandbox Code Playgroud)

或者是否有必要为每个可能的参数创建一个ObjectDataProvider?

希望有人能够帮助我.提前致谢!

Bar*_*rzo 16

我也得到了这个需求.我使用转换器"解决"(如此处所示).

首先,创建一个返回翻译后的字符串的转换器:

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();
  }
}
Run Code Online (Sandbox Code Playgroud)

然后将其用于XAML:

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

<Label Content="{Binding Converter={StaticResource LangConverter}, 
                         ConverterParameter=ResourceKey}"/>
Run Code Online (Sandbox Code Playgroud)

问候.


TYY*_*TYY 7

正确的方法是走 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}}/>
Run Code Online (Sandbox Code Playgroud)