バインディングは、C#と比較してXamarinフォームで多少混乱しているようです。私はXam.Plugins.Settingsをインストールしました。私は単純に自分の設定の一つに<Entry>
をバインドしたいと思っています。ここでは、私は私のXAMLで持っているものです。BindingContextを使用してXam.Plugins.Settingsにエントリをバインドする方法
<Grid BindingContext="{HelloWorld.Helpers.Settings}">
...
<Entry Placeholder="ESN"
Text="{Binding Path=Esn, Mode=TwoWay}"
...
/>
</Grid>
そしてここでは、背後に私のコードです:
namespace HelloWorld.Helpers
{
public static class Settings
{
private static ISettings AppSettings
{
get
{
return CrossSettings.Current;
}
}
#region Setting Constants
private const string EsnKey = "esn_key";
private static readonly string EsnDefault = string.Empty;
#endregion
public static string Esn
{
get
{
return AppSettings.GetValueOrDefault<string>(EsnKey, EsnDefault);
}
set
{
AppSettings.AddOrUpdateValue<string>(EsnKey, value);
}
}
}
}
しかし、私はエラーを取得しています:位置7:15に。タイプHelloWorld.Helpers.Settingsは
This tutorialが見つかりません動的にBindingContextを設定する方法の例を示しているが、あなたが見ることができるよう、設定クラスは静的であり、そして私はnew
を呼び出すことはできません。私はまた、XAMLでバインディングを設定できるようにしたい。私はその後this tutorialを参照したので、XAMLのBindingContextの値を{x:Static HelloWorld.Helpers.Settings}
に設定しようとしましたが、同じエラーが発生します。
私がしたいのは、HelloWorld.Helpers.Settings.Esn
を<Entry>
にマップしてください。
アドバイスはありますか?私はXamarinにとって全く新しいので、C#の経験はほとんどありません。
ありがとうございます!
更新1 5/26 @Alessandroソリューションが動作します。ゲッターとセッターは既に設定で書かれているので、もう書き込む必要はありませんが、機能します。私はINPCを使う必要はありませんでした。他の誰かが同じ問題を抱えている場合の私のContentPageのコードは次のとおりです。ありがとう。
namespace HelloWorld
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class Configuration : ContentPage
{
public Configuration()
{
InitializeComponent();
BindingContext = new MySettings();
}
}
public class MySettings
{
public string Esn
{
get { return HelloWorld.Helpers.Settings.Esn; }
set { HelloWorld.Helpers.Settings.Esn = value; }
}
}
}
そして、コードビハインドで設定されているので、XAML内からBindingContextプロパティを削除しました。
アップデート2 5/26 私はちょうどpublic string Esn
にpublic class Settings
とpublic static string Esn
にpublic static class Settings
を変更しました。 MySettingsの必要性を防ぐことができます。代わりに私は書いていますBindingContext = new Settings();
私はなぜプラグインの開発者が代わりに静的を使用したのか分かりませんが、それは単純な解決策でした。