Xamarin.Forms 静态 ItemsSource 的选择器问题

Xamarin.Forms Picker problem with static ItemsSource

我有一个静态集合Networks:

public class NetworkSettings
{
    private static List<NetworkSetting> _networks;

    public static IList<NetworkSetting> Networks
    {
        get
        {
            if (_networks == null)
            {
                _networks = new List<NetworkSetting>
                {
                    new NetworkSetting(),
                    ...
                    ...
                }
            }
            return _networks;
        }
    }

到目前为止一切顺利。 class 已初始化,有效。

当我从选择器绑定到它时:

[View]
<xmlns:models="clr-namespace:AppName.Models" />

<Picker ItemsSource="{x:Static models:NetworkSettings.Networks}"
        SelectedItem="{Binding SelectedNetworkSetting, Mode=TwoWay}" />

我收到 NullReference 异常(与 ItemsSource 有关)。

但是如果我绑定到相同数据的 ViewModel 版本:

[ViewModel]
public IList<NetworkSetting> NetworkSettings => Models.NetworkSettings.Networks;

[View]
<Picker ItemsSource="{Binding NetworkSettings}"
        SelectedItem="{Binding SelectedNetworkSetting, Mode=TwoWay}" />

..那么一切都很好
有什么不同?为什么接受静态绑定?

静态绑定有点不同,需要使用 x:Static 标记扩展

Bindings and Collections

<Picker ItemsSource="{x:Static local:NetworkSettings.Networks}" />

定义本地的地方

xmlns:local="clr-namespace:blahblahblah;assembly=blahblahblah"

尝试改变

  public static IList<NetworkSetting> Networks

   public static List<NetworkSetting> Networks

它会起作用。