【问题标题】:XAML bind to static method with parametersXAML 绑定到带参数的静态方法
【发布时间】:2013-03-20 10:09:34
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 你不能创建一个转换器,或者格式化字符串,例如Content="{Binding Path=MyValue, StringFormat=You searched for {0}}"/> ?
  • string.Format 只是一个示例输出。将澄清问题。

标签: c# wpf xaml


【解决方案1】:

我也有这个需求。我使用转换器“解决”了(如建议的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}"/>

问候。

【讨论】:

    【解决方案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}}/>
    

    【讨论】:

    • 感谢您的回答,但这种方法意味着我必须为每个不同的参数创建一个自己的 ObjectDataProvider。或者是否可以通过绑定语句更改 ObjectDataProvider 参数?例如:
    • 查看 msdn 链接我的建议唯一可行的方法是 MethodParameters 是否绑定到指定值的东西。所以我想我的答案可能不是你想要的。 weblogs.asp.net/psheriff/archive/2010/02/23/…
    • 感谢您的帮助!
    猜你喜欢
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 2021-12-17
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多