Средство выбора xamarin SelectedItem, возвращающее ноль в наблюдаемой коллекции - PullRequest
0 голосов
/ 06 февраля 2020

в моем проекте xamarin, привязка выбора, SelectedItem не работает. Когда для ItemSource установлено значение List, SelectedItem работает, но когда я изменяю ItemSource на ObservableCollection, SelectedItem всегда возвращает значение NULL. Может кто-то видит, что я делаю не так?

при загрузке представления, средства выбора заполняются через привязку данных. затем при событии кнопки я пытаюсь захватить SelectedItem .... который возвращается, когда он возвращается как ноль.

xaml

        <Picker x:Name="PickerMarket2" Title="Market2" ClassId="PickerMarket2"
                ItemsSource="{Binding TestList2}"
                ItemDisplayBinding="{Binding ShortDesc}"
                SelectedItem="{Binding SelectedMarket}"
                Grid.Row="0" Grid.Column="1" >
        </Picker>

просмотр модели

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

    private ObservableCollection<Performance> _testList2;
    public ObservableCollection<Performance> TestList2
    {
        get { return _testList2; }
        set
        {
            {
                _testList2 = value;
                NotifyPropertyChanged();
            }
        }
    }

    private string _selectedMarket;
    public string SelectedMarket
    {
        get { return _selectedMarket; }
        set
        {
            {
                _selectedMarket = value;
                NotifyPropertyChanged();
            }
        }
    }

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

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

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

...