Почему назначение определенных страниц как MasterDetailPage.Master вызывает ошибку XLS0507? - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь назначить определенную страницу страницей MasterDetailPage.Master, используя этот код.

<MasterDetailPage.Master>
    <views:ListPage/>
</MasterDetailPage.Master>

Но она возвращает ошибку " XLS0507 "

Тип «ListPage» не может использоваться в качестве элемента объекта, потому что он не публикуется c или не определяет publi c конструктор без параметров или преобразователь типа

Если я назначу несколько другая страница должна быть главной, она работает нормально, но эта страница не работает. Все, что мне нужно знать, это то, что именно означает эта ошибка.

Редактировать: Вот код-лист ListPage. Read () и Write () - это методы, используемые для чтения и записи информации в файл и из него. Read берет информацию о файле и помещает ее в ItemList, а Write берет материал из ItemList и помещает его в файл.

        public ObservableCollection<ListModel> ItemList { get; set; }
        bool newItem = false;
        //create newItem for use in Read/Write
        string path = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "Items.txt");
        //path is used in Read/Write
        public ListPage(string name, bool NewItem)
        {
            InitializeComponent();
            newItem = NewItem;
            ItemList = new ObservableCollection<ListModel>();
            Read();
            if (newItem) { Write(name); }
            PageItemList.ItemsSource = ItemList;
        }

1 Ответ

1 голос
/ 25 апреля 2020

Ваша проблема связана с конструктором страниц.

В конструкторе вы указали, что ваша страница получит два параметра

public ListPage(string name, bool NewItem)
{
   InitializeComponent();
   .....
}

name и NewItem, но при создании страница из XAML, на которой эта страница должна иметь конструктор без параметров, чтобы Xamarin (каркас) мог создать экземпляр этого класса и затем отобразить его.

<MasterDetailPage.Master>
    <views:ListPage/>
</MasterDetailPage.Master>

Сказав выше, вам нужно удалите два параметра из конструктора

public ListPage()
{
    InitializeComponent();
}

И вместе с ним вам также потребуется удалить код внутри конструктора, оставив только метод InitializeComponent();, требуемый Xamarin.

Фактически Рекомендуется избегать выполнения операций в конструкторе, поскольку это может привести к проблемам с производительностью и / или исключениям времени выполнения. Вы можете переместить эти логи c в другой метод, когда объект Page уже создан, например, OnAppearing() является хорошим местом для этого.

В вашем случае, если вы хотите передать эти значения вы можете создать два BindableProperty в вашем ListPage и передать эти значения в эти новые свойства.

Подробнее здесь

Надеюсь, это поможет .-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...