Xamarin Forms - динамически создает запись или средство выбора на основе свойства и связывает его с объектом ObservableCollection - PullRequest
0 голосов
/ 23 марта 2020

У меня есть приложение для форм xamarin, которое получает данные из базы данных. База данных возвращает данные «Авто». У всех этих объектов есть пара свойств. Одно из этих свойств решает, какой вид должен отображаться на экране. Таким образом, автомобиль может иметь свойство с именем «TypeOfView» со значением «Entry» или «Picker» и т. Д. c ..

Проблема заключается в следующем: как я могу динамически создавать виды на основе этого свойства и как это может быть привязано к объектам в списке в viewmodel?

// Это код, за которым создаются элементы управления UI

        BindingContext = DependencyInjectionService.Get<CheckListEditViewModel>();

        var stack = new StackLayout()
        {
            Orientation = StackOrientation.Vertical,
            Padding = 5
        };

        for (int i = 0; i < (BindingContext as CheckListEditViewModel).CheckListItems.Count; i++)
        {
            var item = (BindingContext as CheckListEditViewModel).CheckListItems[i];

            var description = new Label()
            {
                Text = item.Description
            };
            stack.Children.Add(description);

            if ((item.ChecklistItemType == Domain.ChecklistItemType.Number))
            {
                     var numerEntry = new Entry();
                numerEntry.Keyboard = Keyboard.Numeric;
                numerEntry.TextChanged += MyMethod;

                numerEntry.SetBinding(Entry.TextProperty, new Binding(mode: BindingMode.TwoWay, path: "Value", source: item));
                stack.Children.Add(numerEntry);

                // this is to test if the binding worked
                var testLabelBindingTesting = new Label();
                testLabelBindingTesting.SetBinding(Label.TextProperty, new Binding(mode: BindingMode.TwoWay, path: "Value", source: item));
                stack.Children.Add(testLabelBindingTesting);
            }
            else if ((item.ChecklistItemType == Domain.ChecklistItemType.Email))
            {
                var numerEntry = new Entry();
                numerEntry.Keyboard = Keyboard.Email;
                stack.Children.Add(numerEntry);
            }
        }

        Content = stack;

// Список находится в классе viewmodel:

        public ObservableCollection<ChecklistItem> CheckListItems { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...