0

我有一个静态集合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;
        }
    }

到目前为止,一切都很好。此类已初始化且有效。

当我从 Picker 绑定到它时:

[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}" />

..然后一切都很好。
有什么不同?为什么它接受静态绑定?

4

2 回答 2

1

尝试改变

  public static IList<NetworkSetting> Networks

   public static List<NetworkSetting> Networks

它会起作用的。

于 2020-07-17T09:18:27.213 回答
0

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

绑定和集合

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

本地定义的地方

xmlns:local="clr-namespace:blahblahblah;assembly=blahblahblah"
于 2020-07-14T08:02:19.083 回答