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
标记扩展
<Picker ItemsSource="{x:Static local:NetworkSettings.Networks}" />
定义本地的地方
xmlns:local="clr-namespace:blahblahblah;assembly=blahblahblah"
尝试改变
public static IList<NetworkSetting> Networks
至
public static List<NetworkSetting> Networks
它会起作用。
我有一个静态集合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
标记扩展
<Picker ItemsSource="{x:Static local:NetworkSettings.Networks}" />
定义本地的地方
xmlns:local="clr-namespace:blahblahblah;assembly=blahblahblah"
尝试改变
public static IList<NetworkSetting> Networks
至
public static List<NetworkSetting> Networks
它会起作用。