TargetParameterCountException вызывается с привязкой Xamarin к пользовательскому индексатору - PullRequest
0 голосов
/ 27 января 2019

Типы данных и пользовательские элементы управления:

Я определил свой собственный тип, который является "IList bool" , и имеет свой собственный индексатор.Этот класс хранит, повторять ли что-то в определенный день, т. Е. Если бы данные [2] были истинными, то это означало бы, что что-то должно быть повторено в среду.Ниже приведена часть кода

 public class WeeklyDayPresence : INotifyCollectionChanged, IList<bool>, ISerializable
        {
            private List<bool> Data { get; set; }
            public bool this[int index]
            {
                get => Data[index];
                set
                {
                    bool temp = Data[index];
                    Data[index] = value;
                    CollectionChanged?.Invoke(this,new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace,value,temp,index));
                }
            }
         }

Теперь у меня есть система выбора, которая позволяет пользователям включать или выключать кнопки, привязанные к определенному дню, чтобы они могли выбирать, какие дни должны быть истинными илиfalse.

Поэтому я создал элемент управления («DayOfWeekSelector»), который по сути представляет собой макет стека из 7 очень похожих пользовательских кнопок.Вот код для пользовательской кнопки:

public class DayOfWeekButton : Button
    {
        public static readonly BindableProperty SelectedProperty =
            BindableProperty.Create("Selected", typeof(bool), typeof(bool), false);

        public bool Selected
        {
            get => (bool) GetValue(SelectedProperty);
            set
            {
                SetValue(SelectedProperty, value);
                RefreshColours();
            }
        }

        public DayOfWeekButton()
        {
            RefreshColours();
            Clicked += DayOfWeekButton_Clicked;
        }

        private void DayOfWeekButton_Clicked(object sender, EventArgs e)
        {
            Selected = !Selected;
        }
    }

В моем DayOfWeekSelector я передаю объект, который "имеет" WeeklyDayPresence:

public class EventOccurrenceRepeater : NotifyModel, ISerializable
    {
        private WeeklyDayPresence _repeatOnDay;
        public WeeklyDayPresence RepeatOnDay
        {
            get => _repeatOnDay;
            set => SetValue(ref _repeatOnDay, value);
        }
     }

Проблема:

Когда я пытаюсь привязать значения к кнопке, я получаю System.Reflection.TargetParameterCountException .

private void AddButton(string text, int ID)
        {
            var button = new DayOfWeekButton {Text = text};
            var binding = new Binding($"RepeatOnDay[{ID}]", BindingMode.TwoWay);
            button.SetBinding(DayOfWeekButton.SelectedProperty, binding);
            button.BindingContext = Repeater; // Throws Exception after this
            //...
        }

Что это за исключение и почему я его получаю?Я прикрепил ссылку к трассировке стека, если это помогает

...