Проблема средства выбора Xamarin.Forms со stati c ItemsSource - PullRequest
0 голосов
/ 14 июля 2020

У меня есть stati c collection 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}" />

.. то все нормально. Какая разница? Почему он принимает привязку stati c?

Ответы [ 2 ]

1 голос
/ 17 июля 2020

Попробуйте изменить

  public static IList<NetworkSetting> Networks

на

   public static List<NetworkSetting> Networks

, это сработает.

0 голосов
/ 14 июля 2020

Stati c привязка немного отличается, и вам нужно будет использовать x:Static расширение разметки

Привязки и коллекции

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

Где определяется местный

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