Xamarin Picker не принимает нулевой элемент на его itemsSource - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь добавить нулевое значение по умолчанию для моего средства выбора. Но я получаю нулевое исключение, если один из элементов в ItemsSource равен нулю. Вот средство выбора на моем XAML: Средство выбора

<Picker Grid.Row="0"
       x:Name="Control"
       IsVisible="False"
       SelectedIndexChanged="selectedIndexChanged" />

Вот ошибка и значения на ItemsSource:

Error

private void updateItemsSource(object oldValue, object newValue)
{
       if (oldValue is INotifyCollectionChanged oldObservable)
       {
           oldObservable.CollectionChanged -= onCollectionChanged;
       }

       Control.ItemsSource = ItemsSource;

       if (ItemsSource is INotifyCollectionChanged observable)
       {
           observable.CollectionChanged += onCollectionChanged;
       }

       setDefaultSelection();
}

Есть ли способ заставить сборщик принимать нулевые значения? Может быть, рендерер? В противном случае мне придется использовать пустую строку в качестве значения по умолчанию. Который я не считаю идеальным для меня.

1 Ответ

0 голосов
/ 05 февраля 2020

Если вы используете MVVM с Picker в Xamarin Forms , вы можете избежать нулевого значения при заданном значении для модели.

Например, иметь Модель выглядит следующим образом:

public class Model 
{
    private string name;

    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            if (name != value & null != value)
            {
                name = value;
            }
            else
            {
                name = "Default Value";
            }
        }
    }
}

Используется в ViewModel и инициализируется нулевым значением insd ie it.

public class ViewModel
{

    public List<Model> monkeyList { set; get; }

    public ViewModel()
    {
        monkeyList = new List<Model>();
        monkeyList.Add(
            new Model() {
                Name = "Baboon"
            });

        monkeyList.Add(
           new Model()
           {
               Name = "Capuchin"
           });

        monkeyList.Add(
           new Model()
           {
               Name = "Squirrel"
           });
        monkeyList.Add(
           new Model()
           {
               Name = "Howler"
           });
        monkeyList.Add(
           new Model()
           {
               Name = null
           });
    }
}

Затем в Xaml , Picker покажет данные без проблем.

<Picker x:Name="picker"
        Title="Select a monkey"
        TitleColor="Red"
        ItemsSource="{Binding monkeyList}"
        ItemDisplayBinding="{Binding Name}">
</Picker>

Эффект выглядит следующим образом:

enter image description here

...