Mvvm Xamarin窗体视图仅在作为子级添加到codebehind中时渲染

Mvvm Xamarin窗体视图仅在作为子级添加到codebehind中时渲染,mvvm,xamarin.forms,prism,Mvvm,Xamarin.forms,Prism,我有一个自定义视图,我正试图将其作为列表传递给它。由于某些原因,当尝试加载页面时,应用程序抛出System.ArrayTypeMismatchException 下面是课堂: public class DiaryCalendarCustomView : View { MiscFunctions misctools = new MiscFunctions(); private List<DiaryNextContactEventModel> _eventList =

我有一个自定义视图,我正试图将其作为列表传递给它。由于某些原因,当尝试加载页面时,应用程序抛出System.ArrayTypeMismatchException

下面是课堂:

public class DiaryCalendarCustomView : View
{
    MiscFunctions misctools = new MiscFunctions();

    private List<DiaryNextContactEventModel> _eventList = new List<DiaryNextContactEventModel>();

    public List<DiaryNextContactEventModel> EventList
    {
        get { return _eventList; }
        set { _eventList = value; }
    }

    public void SetSelectedDate (DateTime selectedDate)
    {
        SelectedDate = selectedDate;

        Settings.Current.NextContactContactDate = selectedDate.ToLocalTime();
    }

    public DateTime SelectedDate { get; set; }

    public DiaryCalendarCustomView()
    {
    }
}
视图模型:

private List<DiaryNextContactEventModel> _eventList = new List<DiaryNextContactEventModel>();

public List<DiaryNextContactEventModel> EventList
{
    get { return _eventList; }
    set { SetProperty(ref _eventList, value); }
}
当我向EventList对象添加静态数据时,它可以正常工作;当我从XAML视图中删除绑定时,它也可以正常工作。因此,问题似乎是xamarin试图将我的列表转换为另一种类型的可枚举列表,而这正是它失败的地方

XAML:


调试和搜索并没有提供任何有用的东西。任何帮助都将不胜感激。

如果您想在XAML中使用自定义属性,您需要在视图中声明它。您的代码似乎很好,只需按照以下教程进行操作:并添加缺少的部分,因此属性定义和propertyChanged方法:

public static readonly BindableProperty EventListProperty = BindableProperty.Create(
                                                         propertyName: "EventList",
                                                         returnType: typeof(List<DiaryNextContactEventModel>),
                                                         declaringType: typeof(DiaryCalendarCustomView),
                                                         defaultValue: "",
                                                         defaultBindingMode: BindingMode.TwoWay,
                                                         propertyChanged: EventListPropertyChanged);
而且:

private static void EventListPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
    var view = (DiaryCalendarCustomView) bindable;
    view.EventList = (List<DiaryNextContactEventModel>) newValue;
}

还要确保您的类实现INotifyPropertyChanged接口,这样当您在EventListPropertyChanged中更改EventList时,视图将被重新加载

您好,谢谢您的回答我已经添加了一个BindableProperty,正如您上面提到的,我已经阅读了该教程,以查看是否遗漏了一些内容,但我仍然得到相同的错误。奇怪的是,是否调用了EventListPropertyChanged方法?页面没有加载,它在InitializeComponent上崩溃为了更正我以前的语句,在我将代码从后面的代码移到自定义视图类并对其进行了一些处理之后,我还必须修复页面现在加载的一些空问题。我现在唯一的问题是,一旦我的请求返回,我似乎无法用绑定数据更新它。我还要跟进这个问题。我发现这是因为日历没有重画。修改了更多的代码,我们就可以开始了。谢谢你们为我指明了方向。祝你过得愉快!
private static void EventListPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
    var view = (DiaryCalendarCustomView) bindable;
    view.EventList = (List<DiaryNextContactEventModel>) newValue;
}