我正在研究针对iOS / Droid / UWP的Xamarin表单项目。我们正在以被动方式构建应用程序,并使用直接模型绑定。例如,假设我们有以下代码
public class Product : RealmObject
{
public string Name { get; set; }
}
// Learn more about making custom code visible in the Xamarin.Forms previewer
// by visiting https://aka.ms/xamarinforms-previewer
[DesignTimeVisible(false)]
public partial class MainPage : ContentPage
{
public static string LocalPath = "";
public MainPage()
{
InitializeComponent();
var realm = Realm.GetInstance(Path.Combine(LocalPath, "RealmSample.realm"));
realm.Write(() =>
{
realm.Add(new Product()
{
Name = "Test"
});
});
BindingContext = realm.All<Product>().FirstOrDefault();
}
}
以及以下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"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="RealmBindingSample.MainPage">
<StackLayout>
<Entry
Text="{Binding Name}"/>
</StackLayout>
</ContentPage>
这里没有什么特别的。并且此代码在iOS / Droid上运行良好,并且一旦Entry的值更改,数据就会持久保存。但是,在页面加载后的UWP上,我得到以下异常
无法在写事务之外修改托管对象。
这是UWP中的预期行为吗?我错过了什么吗?
我已经安装了Realm.Database nuget版本3.4.0,并且所有项目中都存在FodyWeavers.xml
文件。
答案 0 :(得分:1)
我在Realm.Net库的official github issues中对此问题进行了回复。
双向数据绑定不适用于Realm 3.4.0的UWP,因为 这是一个netstandard 1.4库和实现所需的类 自动事务仅在netstandard 2.0中添加。您可以 将Realm升级到4.0.0,但是请注意这需要 将您的UWP项目升级到目标netstandard 2.0。
问题出在我使用的Realm nuget软件包的版本中。我使用Realm.Database nuget最新的3.4.0版本。我用Realm nuget版本4.0.0替换了该软件包后,一切正常。