2013-03-20 52 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 2013-03-20 10:33:03

+0

string.Format只是一個示例輸出。將清除問題。 – Gerrit 2013-03-20 10:38:20

回答

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 2013-03-20 10:44:43

+0

是的,你可以綁定到參數將在幾個更新。 – TYY 2013-03-20 10:52:01

+0

看着msdn鏈接我的建議將工作的唯一方法是如果MethodParameters被綁定到指定值的東西。所以我想我的答案可能不是你想要的。 http://weblogs.asp.net/psheriff/archive/2010/02/23/bind-objectdataprovider-method-parameters-in-wpf.aspx – TYY 2013-03-20 11:03:01

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

問候。