Xamarin Picker не является обязательным - PullRequest
0 голосов
/ 06 февраля 2020

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

здесь 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>

здесь viewModel

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);

1 Ответ

1 голос
/ 06 февраля 2020

Насколько я вижу из вашего кода, SelectedItem кажется проблемой. Поскольку ItemsSource (свойство TestList) вашего Picker имеет тип List<Performance>, свойство SelectedItem, связанное с Picker, должно иметь тип Performance. Но в вашем случае вы сохранили его как string вместо Performance.

ItemDisplayBinding должно быть именем любого свойства внутри вашего Performance объекта, что в вашем случае хорошо, так как у вас есть строковое свойство с именем ShortDesc внутри вашего Performance класса.

Это проблема, которую я вижу в вашем коде. Измените тип свойства ShortDesc, как показано ниже, и присвойте ему любой из элементов вашей коллекции TestList. Ваш код начнет работать нормально.

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

См. документацию здесь , которая объясняет наглядный пример привязки объектов к средству выбора.

Надеюсь, это поможет.

...