Флажок Xamarin неправильно «связывает» с ObservableCollection в App.xaml.cs - PullRequest
1 голос
/ 21 марта 2020

У меня есть Listview, с кучей «модулей» в одной ObservableCollection, которая была установлена ​​как ItemsSource. Эта коллекция была установлена ​​как:

public static ObservableCollection<Module> Modules { get; set; } в App.xaml.cs, чтобы сделать ее глобальной.

Когда я нажимаю флажок в списке, он запускает эту функцию:

private void ModuleCheckbox_CheckedChanged(object sender, CheckedChangedEventArgs e)
        {
            var checkbox = (CheckBox)sender;

            var item = (Module)checkbox.BindingContext;
            item.ModuleIsChecked = checkbox.IsChecked;

            foreach(Module m in App.Modules)
            {
                Console.WriteLine(m.Name + " Value: " + m.ModuleIsChecked);        
            }
        }

Как видите, я пытаюсь установить свойство: ModuleIsChecked таким же, как флажок, который в этом случае должен быть истинным или ложным. Теперь, когда я нажимаю флажок, и foreach-l oop проходит через, значения верны. Когда я go перехожу на новую "страницу" с помощью функции Navigation.PushAsync(new NewSite()); и снова запускаю l oop, ни один из модулей не имеет значения ModuleIsChecked, как установлено ранее. Как это возможно?

Модуль имеет следующие атрибуты:

        public string Description { get; set; }
        public bool IsVisible { get; set; }
        public bool ModuleIsChecked { get; set; }
        public ObservableCollection<Question> QuestionList { get; set; }

edit в соответствии с запросом, вот код на новой странице, где я запускаю ту же список, чтобы увидеть, были ли мои выборки «застряли» в этой ObservableCollection:

public partial class NewSite : ContentPage
    {

        public Questions()
        {


            InitializeComponent();
            BindingContext = new App();

            foreach(Module m in App.Modules)
            {
                Console.WriteLine("Module: {0} ModuleisChecked: {1}", m.Name, m.ModuleIsChecked);
            }

И здесь, Консоль показывает, что все значения являются Ложными. Любые идеи?

1 Ответ

0 голосов
/ 22 марта 2020

Спасибо Джейсону в комментариях! (Я не знаю, как связать вас здесь, извините!)

Проблема заключается в следующем:

BindingContext = new App();

Как сказал Джейсон, это создает новый экземпляр приложения вместо использования существующий, который я только что отредактировал. Комментируя это, я смог заставить это работать как задумано. Спасибо!

Можно отметить как решенное, спасибо!

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