绑定 xamarin 表单选择器值的正确方法
Posted
技术标签:
【中文标题】绑定 xamarin 表单选择器值的正确方法【英文标题】:Correct way of binding xamarin forms picker value 【发布时间】:2019-09-22 08:41:03 【问题描述】:我的问题是我有 2 个选择器控件。这些选取器控件中的 1 个绑定到列表 a,这些选取器控件之一绑定到列表 b。这两个控件都显示了我需要它们的数据,并且正确的显示绑定工作正常。
我的问题是当我绑定 selectedItem 属性时,它适用于列表 a,但不适用于列表 b。我已经检查过该代码实际上是彼此相似的副本。
我一直在使用 syncfusion Combobox,但切换到选择器,因为我认为这里有问题但没有。无论发生什么,都完全取决于我在做什么。
使用场景是我从我的 API 中提取支付类型列表并基于此填充选择器。这行得通。
我的主视图的数据源包含一个 ID。当我修改记录时,我运行一个名为 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】:只见树木不见森林。
private PaymentTypeInformation PaymentTypeInformation1
get
return _paymentTypeInformation;
set
_paymentTypeInformation = value;
OnPropertyChanged(nameof(PaymentTypeInformation1));
无法绑定到私有属性 - 更改为公共属性并立即生效。坚持了一天,真是难以置信。
【讨论】:
这是对您问题的回答还是补充?! 这回答了我自己的问题以上是关于绑定 xamarin 表单选择器值的正确方法的主要内容,如果未能解决你的问题,请参考以下文章