【问题标题】:Xamarin Picker not accepting null item on its itemsSourceXamarin Picker 不接受其 itemsSource 上的空项目
【发布时间】:2020-02-04 18:56:09
【问题描述】:

我正在尝试将 null 默认值添加到我的 Picker。但是,如果 ItemsSource 中的一项为空,我会得到一个空异常。 这是我的 XAML 上的选取器: Picker

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

这是错误和 ItemsSource 上的值:

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();
}

有没有办法让选择器接受空值?也许是渲染器?否则我将不得不使用一个空字符串作为我的默认值。我认为这不是我的理想选择。

【问题讨论】:

  • 请粘贴实际代码,而不是图片。
  • 您的目标是不显示初始值吗?如果是这样,您可以设置 SelectedIndex = -1。
  • 查看answer了解更多详情。
  • 确实如此。我试图添加一个新的空字段,而不是使用 -1 作为默认选定索引。这很愚蠢,我知道。但这对我有帮助 =) 谢谢@Andrew
  • @MarceloArchizaAlmeida 您好,欢迎来到 SO!如果使用 MVVM,这个问题就可以避免。如果使用List&lt;string&gt;作为ItemSource,需要注意不要手动添加空值。

标签: c# xaml xamarin picker


【解决方案1】:

如果在 Xamarin Forms 中将 MVVMPicker 一起使用,则可以在为模型设置值时避免空值。

例如,有一个 Model 如下:

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中使用并用空值初始化。

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>

效果如下:

【讨论】:

  • 我用的是MVVM,这是一个自定义控件,具有可绑定的属性,与视图模型的绑定更上一层楼。
  • 不过还是谢谢你!!这是一个有用的教程,我不是反对你的人。
  • @MarceloArchizaAlmeida Okey,如果使用可绑定属性,可以避免设置空属性。如果你已经解决了,你可以分享解决方案然后记得标记它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 2017-04-15
相关资源
最近更新 更多