0

我有一个我试图传递的自定义视图List<T>。出于某种原因,在尝试加载页面时,应用程序会抛出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:

<Grid VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
       <Grid.Children>
            <partials:DiaryCalendarCustomView EventList="{Binding EventList}"/>
       </Grid.Children>
 </Grid>

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

4

1 回答 1

1

如果要在 XAML 中使用自定义属性,则需要在视图中声明它。您的代码看起来不错,只需按照以下教程进行操作:在 Xamarin.Forms 中使用可绑定属性创建自定义控件并添加缺少的部分,因此属性定义和 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 时,视图将被重新加载

于 2018-04-30T07:48:17.467 回答