Picker的ItemDisplayBinding的MultiBinding在添加新项目时抛出Null引用异常

问题描述

考虑遵循Xamarin形式的XAML。我已经将Picker控件与ObserableCollection绑定在一起,并将MultiBinding分配给了它的ItemdisplayBinding属性-

<Picker ItemsSource="{Binding BooksList}">
   <Picker.ItemdisplayBinding>
       <MultiBinding StringFormat="{}{0} - {1}">
           <Binding Path="Title"/>
           <Binding Path="Subtitle"/>
       </MultiBinding>
   </Picker.ItemdisplayBinding>
</Picker>

<Button Text="Add" Command="{Binding AddCommand}"/>
<Button Text="Remove" Command="{Binding RemoveCommand}"/>

以及相应的viewmodel-

AddCommand = new Command((object item) =>
{
    BooksList.Add(new ListItem
            {
                Title = "Book Name",Subtitle = "Author Name"
            });
}
...

private ObservableCollection<ListItem> _booksList;
public ObservableCollection<ListItem> BooksList
{
    get => _booksList;
    set
    {
        _booksList = value;
        OnPropertyChanged(nameof(BooksList));
    } 
}

...

public BookClass
{
    BooksList = new ObservableCollection<ListItem>();
}

...

public class ListItem
{
    public string Title { get; set; }
    public string Subtitle { get; set; }
}

现在,当我运行应用程序并单击“添加”按钮时,它可以正常工作,并且可以在选择器控件中看到一个元素。但是,当我再次按下“添加”按钮时,它会引发以下异常-

对象引用未设置为对象的实例

堆栈跟踪-

{System.NullReferenceException: Object reference not set to an instance of an object.
  at Xamarin.Forms.MultiBinding.Apply (System.Object context,Xamarin.Forms.BindableObject targetobject,Xamarin.Forms.BindableProperty targetProperty,System.Boolean fromBindingContextChanged) [0x0013a] in D:\a\1\s\Xamarin.Forms.Core\MultiBinding.cs:147 
  at Xamarin.Forms.Picker.GetdisplayMember (System.Object item) [0x00018] in D:\a\1\s\Xamarin.Forms.Core\Picker.cs:184 
  at Xamarin.Forms.Picker.AddItems (System.Collections.Specialized.NotifyCollectionChangedEventArgs e) [0x00032] in D:\a\1\s\Xamarin.Forms.Core\Picker.cs:252 
  at Xamarin.Forms.Picker.CollectionChanged (System.Object sender,System.Collections.Specialized.NotifyCollectionChangedEventArgs e) [0x00010] in D:\a\1\s\Xamarin.Forms.Core\Picker.cs:238 
  at System.Collections.ObjectModel.ObservableCollection`1[T].OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs e) [0x00018] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.ObjectModel/src/System/Collections/ObjectModel/ObservableCollection.cs:263 
  at System.Collections.ObjectModel.ObservableCollection`1[T].OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedAction action,System.Object item,system.int32 index) [0x00000] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.ObjectModel/src/System/Collections/ObjectModel/ObservableCollection.cs:338 
  at System.Collections.ObjectModel.ObservableCollection`1[T].InsertItem (system.int32 index,T item) [0x0001a] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.ObjectModel/src/System/Collections/ObjectModel/ObservableCollection.cs:196 
  at System.Collections.ObjectModel.Collection`1[T].Add (T item) [0x00020] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Collections/ObjectModel/Collection.cs:71 
  at RS.Apps.viewmodels.BookShelf.BookShelfviewmodel.<.ctor>b__37_3 (System.Object item) [0x00018] in C:\user43424\GitHub\Booking\Mobile\Apps\viewmodels\BookShelf\BookShelfviewmodel.cs:97 }

我无法全神贯注于这里发生的事情。为什么要使用null引用异常,我还缺少什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)