23

次のような静的クラスを取得しました。

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

ここで、xaml 内のこの静的関数にバインディングとしてアクセスしたいと考えています。たとえば、そのような方法はありますか:

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

または、可能なパラメーターごとに ObjectDataProvider を作成する必要がありますか?

誰かが私を助けてくれることを願っています。前もって感謝します!

4

2 に答える 2

23

私もこの必要性を理解しています。コンバーターを使用して「解決」しました(ここで提案されているように)。

まず、翻訳された文字列を返すコンバーターを作成します。

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

よろしく。

于 2013-08-28T07:47:11.143 に答える
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}}/>
于 2013-03-20T10:43:09.413 に答える