【问题标题】:xamarin picker not bindingxamarin 选择器不绑定
【发布时间】:2020-05-22 19:12:30
【问题描述】:

我的项目中有多个选择器,由于某种原因,只有一个选择器没有绑定。我已经搞砸了两天了,无论我是否更改为可观察的集合或字符串列表,它仍然无法正常工作。

这里是 xaml

                <Picker x:Name="PickerMarket" Title="Market" ClassId="PickerMarket"
                    ItemsSource="{Binding TestList}"
                    ItemDisplayBinding="{Binding ShortDesc}"  
                    SelectedItem="{Binding ShortDesc}"
                    Grid.Row="0" Grid.Column="1" >
            </Picker>

这是视图模型

class VamiMarketViewModel: INotifyPropertyChanged
{
    private List<Performance> _testList;
    public List<Performance> TestList
    {
        get { return _testList; }
        set
        {
            {
                _testList = value;
                NotifyPropertyChanged();
            }
        }
    }

    private string _shortDesc;
    public string ShortDesc
    {
        get { return _shortDesc; }
        set
        {
            {
                _shortDesc = value;
                NotifyPropertyChanged();
            }
        }
    }

    public class Performance
{
    public int PerformanceDailyTableId { get; set; }
    public DateTime Filedate { get; set; }
    public string Office { get; set; }
    public string Account { get; set; }

    public decimal TradeLevel { get; set; }
    public decimal BeginningEquity { get; set; }
    public decimal fxPL { get; set; }
    public decimal CashActivity { get; set; }
    public decimal CashActivityNonPl { get; set; }
    public decimal TBills { get; set; }
    public decimal OTEChange { get; set; }
    public decimal Realized { get; set; }
    public decimal Commission { get; set; }
    public decimal ClearingFees { get; set; }
    public decimal ExchangeFees { get; set; }
    public decimal NFAFees { get; set; }
    public decimal BrokerageFees { get; set; }
    public decimal TransactionFees { get; set; }
    public decimal NetPerformance { get; set; }
    public decimal EndingEquity { get; set; }
    public decimal DailyROR { get; set; }
    public decimal Vami { get; set; }
    public decimal ADMstmtNLVchange { get; set; }
    public decimal ManualAdjustment { get; set; }
    public decimal DoubleCheck { get; set; }

    public string AccountNumber { get; set; }
    public string Sector { get; set; }
    public string ShortDesc { get; set; }
}

在仅为测试目的创建视图模型时,我试图像这样填充列表

            Performance p1 = new Performance();
        p1.ShortDesc = "user";
        TestList.Add(p1);

        Performance p2 = new Performance();
        p2.ShortDesc = "stephen";
        TestList.Add(p2);

【问题讨论】:

  • try ItemDisplayBinding="ShortDesc" - ItemDisplayBinding 是用于显示的属性名称,而不是实际的绑定表达式
  • 它不允许我这样做... xaml 中的语法错误?
  • 我刚刚仔细检查了文档,显然我的记忆有问题 - 该属性确实需要一个绑定表达式
  • 感谢您检查...还有什么其他想法为什么它不起作用?
  • 刚刚确认它与我的异步下载数据有关......然后对该方法所做的任何事情都不会反映在 UI 中。这正常吗?

标签: xamarin.forms data-binding picker


【解决方案1】:

我从您的代码中看到,SelectedItem 似乎是问题所在。 由于您的PickerItemsSource(TestList 属性)属于List&lt;Performance&gt; 类型,因此绑定到PickerSelectedItem 属性必须属于Performance 类型。但是,在您的情况下,您将其保留为 string 而不是 Performance

ItemDisplayBinding 必须是您的 Performance 对象内的任何属性的名称,在您的情况下这很好,因为您的 Performance 类中有一个名为 ShortDesc 的字符串属性。

这就是我在您的代码中看到的问题。更改属性ShortDesc 的类型,如下所示,并将集合TestList 中的任何一项分配给它。您的代码将开始正常工作。

private Performance _shortDesc;
public Performance ShortDesc
{
   get { return _shortDesc; } 
   set
   {
       {
            _shortDesc = value;
            NotifyPropertyChanged();
       }
   }
}

请参阅documentation here,其中解释了将对象绑定到 Picker 的清晰示例。

我希望这会有所帮助。

【讨论】:

  • 这就是问题,谢谢。我更改为 observablecollection,然后也将 shortdes 更改为 Performance,它可以正常工作
猜你喜欢
  • 2020-01-15
  • 2018-02-01
  • 2021-04-18
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
相关资源
最近更新 更多