gpt4 book ai didi

c# - 如何使用 BindingContext 将 Entry 绑定(bind)到 Xam.Plugins.Settings

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:34 26 4
gpt4 key购买 nike

与 C# 相比,Xamarin Forms 中的绑定(bind)似乎更加困惑。我安装了Xam.Plugins.Settings .我只是想绑定(bind)一个 <Entry>到我的设置之一。这是我的 XAML 中的内容:

<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 not found

This tutorial显示了如何动态设置 BindingContext 的示例,但如您所见,Settings 类是静态的,因此我无法调用 new .我还希望能够在 XAML 中设置绑定(bind)。然后我提到了this tutorial ,所以我尝试将 XAML 中的 BindingContext 的值设置为 {x:Static HelloWorld.Helpers.Settings} ,但我得到了同样的错误。

我只想做 map HelloWorld.Helpers.Settings.Esn对此 <Entry> .

有什么建议吗?我是 Xamarin 的新手,而且我的 C# 经验很少。

提前致谢!

更新 1 5/26@Alessandro 解决方案有效。我不想再写 getter 和 setter,因为它们已经写在设置中,但它可以工作。不过我不必使用 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 static class Settingspublic class Settingspublic static string Esnpublic string Esn .这样就不需要 MySettings。相反,我写了 BindingContext = new Settings();

我不确定插件开发人员为什么改用 static,但这似乎是一个简单的解决方案。

最佳答案

我认为你应该使用一个使用“设置”的类“MySettings”并实现 INotifyPropertyChanged(我对 INPC 使用 PropertyChanged.Fody)

[ImplementPropertyChanged]
public class MySettings
{
public string Url {
get { return Settings.Url; } // These are yours "Settings"
set { Settings.Url = value; }
}
public int Port {
get { return Settings.Port; }
set { Settings.Port = value; }
}

}

关于c# - 如何使用 BindingContext 将 Entry 绑定(bind)到 Xam.Plugins.Settings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44190089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com