Xamarin - Picker Выбранный предмет не меняется - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь связать средство выбора в Xamarin.

Мой HTML-код

<Picker Title="Select a coin"
    ItemsSource="{Binding Coins}"
    ItemDisplayBinding="{Binding Short_Name}"
    SelectedItem="{Binding SelectedCoin,Mode=TwoWay}" />

   <Label Text="{Binding SelectedCoin.Short_Name}" /> //This does not 
   change when I change the item in the picker.

Вот мой код в ViewModel

    public class Currency
    {
        public string Short_Name { get; set; }
        public string Image_Url { get; set; }
    }

    Currency selectedCoin;
    public ObservableCollection<Currency> _coins = new 
    ObservableCollection<Currency>();

    public Currency SelectedCoin
    {
        get { return selectedCoin; }
        set
        {
            if (selectedCoin != value)
            {
                selectedCoin = value;
                OnPropertyChanged();
            }
        }
    }

    public ObservableCollection<CryptoCurrency> Coins
    {
        get
        {
            return _coins;
        }
        set
        {
            SetObservableProperty(ref _coins, value);
        }
    }

    public async void GetCoins()
    {
        Currency c = new Currency();
        coinsPageModel.Coins = await coinsPageModel.GetCoins();

        foreach (var item in coinsPageModel.Coins)
        {
            c.Short_Name = item.Short_Name;
            Coins.Add(c);
        }
    }

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

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

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Валюта c = новая валюта ();Внутри GetCoins должен быть размещен внутри цикла foreach.

0 голосов
/ 29 ноября 2018

Вы должны вызывать изменение свойства каждый раз, когда изменяется SelectedItem, например:

private ObservableCollection<Currency> _coins = new ObservableCollection<Currency>();
public ObservableCollection<CryptoCurrency> Coins
{
    get
    {
        return _coins;
    }
    set
    {
        SetObservableProperty(ref _coins, value);
    }
}

private Currency selectedCoin;
public Currency SelectedCoin
{
    get { return selectedCoin; }
    set
    {
        if (selectedCoin != value)
        {
            selectedCoin = value;
            RaisePropertyChanged(() => this.SelectedCoin);
        }
    }
}

Ваш XAML кажется правильным.

...