Xamarin 表单选择器 - ItemDisplayBinding 不工作

Xamarin Form Picker - ItemDisplayBinding not working

Xamarin 表单选择器 - ItemDisplayBinding 不工作

我正在尝试用 ItemsSource 中的 属性 个对象填充我的选择器,基本上与此处记录的完全相同:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/picker/populating-itemssource#populating-a-picker-with-data-using-data-binding

这是我目前的情况:

Xaml

<ContentPage.BindingContext>
    <local:Model />
</ContentPage.BindingContext>

<Picker Title="Select a Profession" ItemsSource="{Binding Professions}" ItemDisplayBinding="{Binding Name}" />

模型 - 绑定

public List<Profession> Professions { get; set; }

职业对象

public class Profession
{

    public string Name { get; set; }
}

所以按照 Microsoft 的文档,Name 属性 应该显示,但在 Visual Studio 中没有显示(对于 Mac - 2019),它没有将 Name 识别为 属性,只是让我再次选择 Professions

我做错了什么吗?

你必须把这个放在你的 page.cs

例如

在 MainPage.xaml.cs 之后 InitializeComponent();输入 ViewModel 的名称

        BindingContext = new MonkeysPageViewModel();

就像网上的例子https://github.com/xamarin/xamarin-forms-samples/blob/main/UserInterface/MonkeyAppPicker/MonkeyApp/Views/MonkeysPage.xaml.cs

根据您的代码片段,我认为您还没有使用 binding properly.I 已经在我这边测试了您的代码并且它有效喜欢 charm.Below 是供您参考的代码片段。

Xaml中的代码:

 <Picker Title="Select a Profession" ItemsSource="{Binding Professions}" ItemDisplayBinding="{Binding Name}" />

.cs 中的代码:

  public partial class MainPage : ContentPage
  {
        public ObservableCollection<Profession> Professions { get; set; } = new ObservableCollection<Profession>();
        public MainPage()
       {
            InitializeComponent();

            Professions.Add(new Profession { Name = "Teacher" });
            Professions.Add(new Profession { Name = "Doctor" });
            Professions.Add(new Profession { Name = "Astronaut" });

            BindingContext = this;  
        }
   }
  public class Profession
  {
        public string Name { get; set; }
  }

我通过将 List 更改为 ObservableCollection 来解决此问题。我试图用异步方法填充我的选择器,ObservableCollection 实现了 INotifyCollectionChangedInterface

参考: ObservableCollection<> vs. List<>