2015-05-22 68 views
0

我正在嘗試擴展我的WPF應用程序,以便從數據庫獲得多語言支持。WPF使用XAML從數據庫獲得多種語言支持

我的方法將使用ResourceKeys來識別每個控件的內容。

創建這MVVM只是一個不斷變化的性質來查詢與資源和所選擇的語言數據庫的事情,如下:

public string Example 
    { 
     get 
     { 
      if (SelectedLanguage == null) 
       return string.Empty; 

      return ControlMapping.getKey("MainWindow_TxtBoxExample", SelectedLanguage.LanguageID); 
     } 
    } 

在試圖獲得工作我已經設置了綁定建立一個轉換器,它將採取關鍵並從數據庫中選擇適當的值。

public class LanguageSupport : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return ControlMapping.getKey(value.ToString(), SelectedLanguage.LanguageID); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

然後在窗口內,我創建了一個靜態資源來訪問轉換器。

<Window.Resources> 
    <LangSupport:LanguageSupport x:Key="ls"/> 
</Window.Resources> 

不幸的是,這是被我卡住...

我猜測,轉換器是不是要來填充各種控制內容的正確方法。

非常感謝您提供任何幫助。

+0

您必須指定您的轉換器,以你擁有的每綁定,它不會自動完成 – cdie

+0

我意識到這一點,但它怎麼是難以捉摸的一部分。當我最初開始編碼<標籤名稱=「ex3」內容=「{綁定路徑= ls}」/>,然而這dosn't工作。 –

+0

根據您的Window.Resources,您需要通過

回答

0

我包含了一個對mscorlib的引用來授予訪問String類的權限。

xmlns:sys="clr-namespace:System;assembly=mscorlib" 

然後,我定義了一個資源,我可以用它來分配給控件。

<Window.Resources> 
    <LangSupport:LanguageSupport x:Key="ls"/> 
    <sys:String x:Key="hardccodedstring">MainWindow.hardcodedstring</sys:String> 
</Window.Resources> 

然後在控件本身中,我更改了綁定以將該字符串用作ConverterParamater。

<Label Name="ex3" Content="{Binding Converter={StaticResource ls}, ConverterParameter={StaticResource hardccodedstring}}"/> 

轉換器本身也需要更改爲使用此參數,而不是值。

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (parameter == null) 
      return string.Empty; 

     return ControlMapping.getKey(parameter.ToString(), SelectedLanguage.LanguageID); 
    } 
+0

使用轉換器是非常笨重的方法。一個ResourceManager只是一個靜態類,在資源文件中看起來有些東西 - 您可以創建自己的ResourceManager,它可以從數據庫中檢索。 – slugster