2017-08-27 16 views
0

githubのソリューションに基づいて、私は私のソリューションに多言語を追加したいと思います。 しかし、私はcodebehindで、XAMLではないので、コードビハインドでTwoWay Bindingを行う方法はわかりません。ここでXamarin.Formsローカライゼーション

は、私は分離コードに変換するXAMLクラスです:

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     x:Class="myProj.Forms.Pages.LanguageSettingsPage" 
     Title="{Binding Resources[Settings]}"> 
<StackLayout> 
    <Label Text="{Binding Resources[PickLng]}" /> 
    <Picker ItemsSource="{Binding Languages}" SelectedItem="{Binding SelectedLanguage, Mode=TwoWay}" /> 
</StackLayout> 
</ContentPage> 

、今の私の分離コードは次のようになります。

[XamlCompilation(XamlCompilationOptions.Compile)] 
public partial class LanguageSettingsPage : ContentPage 
{ 
    public LanguageSettingsPage() 
    { 
     BindingContext = new SettingsViewModel(); 
     //InitializeComponent(); 

     StackLayout mainStack = new StackLayout(); 
     mainStack.BackgroundColor = Constants.iBackgroundGray; 
     Label chooseLangLabel = new Label { TextColor = Constants.iGray }; 
     chooseLangLabel.Text = LocalizationDemoResources.PickLng; 
     Picker langPicker = new Picker(); 
     langPicker.SelectedItem = App.CurrentLanguage; 
     mainStack.Children.Add(chooseLangLabel); 
     mainStack.Children.Add(langPicker); 
     Content = mainStack; 
    } 
} 

そして、私のSettingsViewModel:

public class SettingsViewModel : ViewModelBase 
{ 
    public List<string> Languages { get; set; } = new List<string>() 
    { 
     "EN", 
     "NL", 
     "FR" 
    }; 

    private string _SelectedLanguage; 
    public string SelectedLanguage 
    { 
     get { return _SelectedLanguage; } 
     set 
     { 
      _SelectedLanguage = value; 
      SetLanguage(); 
     } 
    } 

    public SettingsViewModel() 
    { 
     _SelectedLanguage = App.CurrentLanguage; 
    } 

    private void SetLanguage() 
    { 
     App.CurrentLanguage = SelectedLanguage; 
     MessagingCenter.Send<object, CultureChangedMessage>(this, 
       string.Empty, new CultureChangedMessage(SelectedLanguage)); 
    } 
} 

マイリソースファイルを含むフォルダは次のようになります

this

私のサフィックスのリソースファイルの値でピッカーを埋める方法をバインドするには? ピッカーのアイテムをクリックして言語を変更できるようにするには、どのように観察するか、やや多少なるでしょうか?

ありがとうございました。

答えて

0

SetBinding()あなたは

var l = new Label(); 
l.SetBinding(Label.TextProperty, ".", BindingMode.TwoWay); 
+1

を結合双方向を指定することができ、過負荷を私は何を置く代わりにすべきである「」持っていますか?どこでLabel.Textプロパティにバインドされたリソースフィールドを宣言しますか? – Stefan0309