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));
}
}
マイリソースファイルを含むフォルダは次のようになります
私のサフィックスのリソースファイルの値でピッカーを埋める方法をバインドするには? ピッカーのアイテムをクリックして言語を変更できるようにするには、どのように観察するか、やや多少なるでしょうか?
ありがとうございました。
を結合双方向を指定することができ、過負荷を私は何を置く代わりにすべきである「」持っていますか?どこでLabel.Textプロパティにバインドされたリソースフィールドを宣言しますか? – Stefan0309