Caliburn.Micro.Xamarin.Forms.View.SetContentProperty()Stackoverflow异常

时间:2016-08-28 21:23:38

标签: xamarin.forms caliburn.micro

我正在开发一个Xamarin.Forms应用程序并尝试根据“Hello Screens”示例切换相同viewmodel上的视图。我在WPF中用CM成功完成了几次,但是在Xamarin.Forms中它对我不起作用ViewModel是带有以下LessonsView的“LessonsViewModel”:

<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:cal="clr-namespace:Caliburn.Micro.Xamarin.Forms;assembly=Caliburn.Micro.Platform.Xamarin.Forms"
             x:Class="MyCompany.FreshmanLevel.LessonView">
  <ContentView cal:View.Model="{Binding}" cal:View.Context="{Binding CurrentLesson, Mode=TwoWay}"></ContentView>
</ContentView>

LessonViewModel有一个名为“CurrentLesson”的属性,它是一个带有以下可能值的枚举:

LessonOne
LessonTwo
LessonThree

我有一个“Lesson”文件夹(即“LessonViewModel”减去“ViewModel”)以及以下xaml文件

LessonOne.xaml
LessonTwo.xaml
LessonThree.xaml

如果我使用:

<ContentView cal:View.Model="{Binding}" cal:View.Context="LessonThree">

一切正常。但绑定到变量名称是这样的:

<ContentView cal:View.Model="{Binding}" cal:View.Context="{Binding CurrentLesson, Mode=TwoWay}">

导致VS中输出控制台中出现以下错误:

Stack overflow: IP: 0x1213d7b05, fault addr: 0x0
at Caliburn.Micro.Xamarin.Forms.View.SetContentProperty (object,object) <IL 0x00019, 0x0016d>
at Caliburn.Micro.Xamarin.Forms.View.OnModelChanged (Xamarin.Forms.BindableObject,Caliburn.Micro.DependencyPropertyChangedEventArgs) <IL 0x00033, 0x00258>
at Caliburn.Micro.DependencyPropertyHelper/<>c__DisplayClass0_0.<RegisterAttached>b__0 (Xamarin.Forms.BindableObject,object,object) <IL 0x00017, 0x00132>
at Xamarin.Forms.BindableObject.SetValueActual (Xamarin.Forms.BindableProperty,Xamarin.Forms.BindableObject/BindablePropertyContext,object,bool,Xamarin.Forms.BindableObject/SetValueFlags,bool) [0x00108] in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\BindableObject.cs:584
at Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty,object,Xamarin.Forms.BindableObject/SetValueFlags,Xamarin.Forms.BindableObject/SetValuePrivateFlags) [0x0014b] in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\BindableObject.cs:378
at Xamarin.Forms.BindingExpression.ApplyCore (object,Xamarin.Forms.BindableObject,Xamarin.Forms.BindableProperty,bool) [0x0020c] in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\BindingExpression.cs:177
at Xamarin.Forms.BindingExpression.Apply (object,Xamarin.Forms.BindableObject,Xamarin.Forms.BindableProperty) [0x0006b] in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\BindingExpression.cs:76
at Xamarin.Forms.Binding.Apply (object,Xamarin.Forms.BindableObject,Xamarin.Forms.BindableProperty) [0x00042]
 in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\Binding.cs:113

有谁知道这里发生了什么?

编辑:从我能说的最好的情况来看,问题似乎源于公共属性“CurrentLesson”实际上没有被绑定语句读入。我在普通的WPF应用程序中重新创建了这个问题,并意识到在cal之前列出cal:View.Model =“{Binding}”:View.Context =“{Binding CurrentLesson,Mode = TwoWay}”导致该情况下的问题因为Context需要在cal之前读取值:View.Model正在解析。

但是,我在我的Xamarin Forms应用程序中进行了更正,但仍然出错。如果我设置了一个断点,那么cal:View.Context附加属性甚至不会在“OnContextChanged”被触发之前读取CurrentLesson的值,因此在“静态bool SetContentPropertyCore(对象targetLocation,对象视图)”中出现错误

0 个答案:

没有答案
相关问题