1

我的选择器是空的。我已经创建了一个测试列表来特别测试它,但它也不起作用。

这是我的 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" });
}

当我调试时,我可以看到我的列表是正确的。

4

2 回答 2

2

1)使用System.Generics.ObjectModel.ObservableCollection代替List

ObservableCollection在 CollectionChanges 上通知 View,而 List 不这样做。

(或者)

2)在List初始化时将项目添加到List

List<AdditionSort> testList = new List<AdditionSort>()
{
    new AdditionSort(),
    new AdditionSort(),
    new AdditionSort(),
    new AdditionSort(),
}
于 2020-03-13T10:33:28.847 回答
0

我写了一个演示来使绑定工作,你可以检查代码:

在后面的代码中:

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>

在这里上传了我的示例项目。

另外,这里是文档:Setting a Picker's ItemsSource Property

于 2020-03-16T03:10:38.517 回答