Правильный способ привязки формы ксамарина - PullRequest
0 голосов
/ 22 сентября 2019

Моя проблема в том, что у меня есть 2 элемента управления выбора.1 из этих элементов управления сборщиком привязан к списку a, а один из этих элементов управления сборщиком связан со списком b.Оба эти элемента управления отображают данные, которые мне нужны, с правильными привязками отображения, которые работают нормально.

Моя проблема в том, что когда я связываю свойство selectedItem, оно работает для списка a, но не для списка b.Я проверил, что код буквально похож на аналогичную копию друг друга.

Я использовал Syncfusion Combobox, но переключился на средство выбора, так как думал, что здесь есть проблема, но ее нет.Все, что происходит, полностью зависит от того, что я делаю.

Сценарий использования состоит в том, что я снимаю список типов платежей из моего API и заполняю средство выбора на основе этого.Это работает.

Источник данных для моего основного представления содержит идентификатор.Когда я изменяю запись, я запускаю метод с именем update, чтобы найти selectedItem.Я не доволен этим подходом, и мне было бы интересно посмотреть, что используют другие люди.

Метод обновления получает источники данных для сборщиков и находит то, что, как я ожидаю, будет выбранным элементом.Это также работает нормально, но не связывается.

 [Serializable]
    public class PaymentInformation :BaseModel 
    {

        public int? ID { get; set; }

        public DateTime? StartDate { get; set; }

        public DateTime? EndDate { get; set; }

        public int? PaymentTypeId { get; set; }

        public string PaymentTo { get; set; }

        public string Location { get; set; }

        public string Notes { get; set; }

        public PersonInformation PersonBudget { get; set; }

        public decimal AmountPaid { get; set; }

        public decimal AmountReceived { get; set; }

        public double TotalHours { get; set; }

        public void Update(ObservableCollection<ResourceInformation> resources , ObservableCollection<PaymentTypeInformation> paymentTypes)
        {
           if(PaymentTypeId != null) this.PaymentTypeInformation1 = paymentTypes?.FirstOrDefault((paymentType) => paymentType.ID == PaymentTypeId.Value);
            this.Resource = resources?.FirstOrDefault((resource) => resource.ResourceId == PersonBudget?.ID);
        }

        private PaymentTypeInformation _paymentTypeInformation;

        private PaymentTypeInformation PaymentTypeInformation1 { get { return _paymentTypeInformation; } set { _paymentTypeInformation = value; OnPropertyChanged(nameof(PaymentTypeInformation1)); } }

        private ResourceInformation _resource;

        public ResourceInformation Resource { get { return _resource; } set { _resource = value; OnPropertyChanged(nameof(Resource)); } }

    }

Основной xaml:

 <Label Grid.Row="8" Grid.Column="0" Text="Payment Type:" />
            <Picker BackgroundColor="White" Grid.Row="8" Grid.Column="1" ItemsSource="{Binding PaymentTypesDataSource}"  ItemDisplayBinding="{Binding Path=DisplayText}" IsEnabled="{Binding IsProcessing, Converter={StaticResource reverseBoolConvertor}}" SelectedItem="{Binding DataSource.PaymentTypeInformation1, Mode=TwoWay}" />

Ожидаемый результат состоит в том, что выпадающий список инициализируется с selectedItem, который он не делает(в одном сценарии использования - другой работает нормально).

1 Ответ

0 голосов
/ 22 сентября 2019

Невозможно увидеть лес за деревьями.

private PaymentTypeInformation PaymentTypeInformation1
{ 
    get
    {
        return _paymentTypeInformation;
    }
    set
    { 
        _paymentTypeInformation = value;
        OnPropertyChanged(nameof(PaymentTypeInformation1));
    } 
}

Невозможно привязать частную собственность - изменено на общедоступное и сразу работает.Застрял в этом на день, как помешанный на том, чтобы поверить.

...