Xamarin Forms UWP中的领域2路绑定引发异常

时间:2019-06-16 15:02:52

标签: c# xaml xamarin.forms uwp realm

我正在研究针对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文件。

1 个答案:

答案 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替换了该软件包后,一切正常。