C# 带有静态ItemsSource的表单选取器问题
我有一个静态集合C# 带有静态ItemsSource的表单选取器问题,c#,xamarin.forms,data-binding,xamarin-binding,C#,Xamarin.forms,Data Binding,Xamarin Binding,我有一个静态集合网络: public class NetworkSettings { private static List<NetworkSetting> _networks; public static IList<NetworkSetting> Networks { get { if (_networks == null) { _
网络
:
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;
}
}
公共类网络设置
{
专用静态列表网络;
公共静态IList网络
{
得到
{
如果(_networks==null)
{
_网络=新列表
{
新建网络设置(),
...
...
}
}
返回网络;
}
}
到目前为止还不错。这个类是初始化的,并且是有效的
当我从选择器绑定到它时,使用:
[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}" />
[ViewModel]
公共IList NetworkSettings=>Models.NetworkSettings.Networks;
[查看]
…那么一切都好了。有什么区别?为什么它接受静态绑定?静态绑定有点不同,需要使用
x:static
标记扩展
尝试改变
public static IList<NetworkSetting> Networks
公共静态IList网络
到
公共静态列表网络
它将起作用。除了名称空间的名称,这正是我所做的。我将修改这个问题。我发现当您将
IList Networks
更改为List Networks
时,它起作用。@LeoZhu MSFT将此作为答案添加进来,我将接受。我是按照
xmlns:local="clr-namespace:blahblahblah;assembly=blahblahblah"
public static IList<NetworkSetting> Networks
public static List<NetworkSetting> Networks