【问题标题】:Xamarin.Forms Picker problem with static ItemsSource静态 ItemsSource 的 Xamarin.Forms Picker 问题
【发布时间】:2020-07-14 07:38:07
【问题描述】:

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

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

【问题讨论】:

  • 我发现当你把IList&lt;NetworkSetting&gt; Networks改成List&lt;NetworkSetting&gt; Networks,就可以了。
  • @LeoZhu-MSFT 将其添加为答案,我会接受。我遵循docs.microsoft.com/en-us/dotnet/api/… 上的指导方针

标签: c# xamarin.forms data-binding xamarin-binding


【解决方案1】:

尝试改变

  public static IList<NetworkSetting> Networks

   public static List<NetworkSetting> Networks

它会起作用的。

【讨论】:

    【解决方案2】:

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

    Bindings and Collections

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

    定义局部的地方

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

    【讨论】:

    • 除了命名空间的名称,这正是我所做的。我会修改问题。
    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 2013-04-21
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多