Xamarin.Forms Picker ItemsSource остается пустым в XAML - PullRequest
1 голос
/ 13 марта 2020

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

это мой XAML

<Picker x:Name="picker1" Grid.Row="1" Grid.Column="1" ItemsSource="{Binding TestList}" ItemDisplayBinding="{Binding Name}" SelectedItem="{Binding AdditionSort}"/>

это мой код

List<AdditionSort> TestList
{
    get => testList;
    set => SetValue(ref testList, value);
}

List<AdditionSort> testList = new List<AdditionSort>();

void LoadList()
{
    TestList.Add(new AdditionSort { Name = "test1" });
    TestList.Add(new AdditionSort { Name = "test2" });
}

, когда я отлаживаю, я вижу, что мой список правильный.

Ответы [ 2 ]

1 голос
/ 13 марта 2020

1) Использование System.Generics.ObjectModel.ObservableCollection вместо List.

ObservableCollection уведомляет View на CollectionChanges, где в качестве List это не делается.

(Или)

2) Добавление элементов в список при инициализации списка

List<AdditionSort> testList = new List<AdditionSort>()
{
    new AdditionSort(),
    new AdditionSort(),
    new AdditionSort(),
    new AdditionSort(),
}
0 голосов
/ 16 марта 2020

Я написал демо, чтобы заставить работать привязку, и вы можете проверить код:

В коде позади:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        myModel m = new myModel();

        BindingContext = m;
    }
}

public class myModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;


    protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    List<AdditionSort> testList = new List<AdditionSort>();

    public List<AdditionSort> TestList
    {
        get { return testList; }
        set
        {
            testList = value;
            OnPropertyChanged();
        }
    }

    public myModel() {

        LoadList();

    }

    void LoadList()
    {
        TestList.Add(new AdditionSort { Name = "test1" });
        TestList.Add(new AdditionSort { Name = "test2" });
    }
}

public class AdditionSort
{       
    public string Name { get; set; }
}

И в Xaml:

<StackLayout>
    <!-- Place new controls here -->
    <Picker x:Name="picker1" ItemsSource="{Binding TestList}" ItemDisplayBinding="{Binding Name}" SelectedItem="{Binding AdditionSort}"/>

</StackLayout>

Я загрузил мой пример проекта здесь .

Кроме того, вот документ: Установка свойства ItemsSource сборщика

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...