2017-08-27 2 views
0

Basierend auf der Lösung auf github, möchte ich mehrsprachige Lösung zu meiner Lösung hinzufügen. Allerdings habe ich meine Codebehind, und nicht XAML, also weiß ich nicht, wie TwoWay Binding in Codebehind tun. HierXamarin.Forms Lokalisierung

ist die XAML-Klasse, die ich Code-Behind konvertieren möchten:

<?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> 

und jetzt ist mein Code-Behind wie folgt aussieht:

[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; 
    } 
} 

Und mein 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)); 
    } 
} 

Meine Ordner mit Ressourcendateien sieht wie

aus

this

Wie binden Sie es, um Picker mit Werten aus meinen Suffix-Ressourcen-Dateien gefüllt zu bekommen? Und wie man beobachtbar oder etwas, in der Lage zu sein, die Sprachen beim Klicken eines Artikels in der Auswahl zu ändern?

Danke.

Antwort

0

SetBinding() eine Überlastung, die Sie TwoWay Bindung

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

Was sollte ich statt "" angeben können? Wo muss das Ressourcenfeld angegeben werden, das an eine Label.Text-Eigenschaft gebunden ist? – Stefan0309