Элемент Xamarin Forms Bind Array внутри listView - PullRequest
0 голосов
/ 26 октября 2018

нужно попросить вас руку с этим.В настоящее время я разрабатываю решение Xamarin Forms с использованием MVVM, и сейчас я нахожусь в новой ситуации.

У меня есть listView с элементами этого класса

 public class City
{
    public int Key { get; set; }
    public string Value { get; set; }
    public List<string> Words{ get; } = new List<string> { "One", "Two", "Three" };
}

ЧтоЯ хочу добиться, чтобы отображался текст метки, созданный с использованием элементов списка Words, обозначенных Key.Что-то вроде

Words[Key]

Пример

 <ListView
        ItemsSource="{Binding Cities}">
        <ListView.ItemTemplate>
            <DataTemplate>
            <ViewCell>
                <StackLayout
                    HorizontalOptions="FillAndExpand"
                    VerticalOptions="StartAndExpand">

                    <Label Text="{Binding Words[Key]}"
                        FontSize="18"
                        TextColor="Black"
                        VerticalOptions="StartAndExpand" />        
                </StackLayout>

                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Привязка текста метки не работает, но с технической точки зрения это то, что мне нужно для достижения.Например, если я использую Words[0], он будет работать и возвращает 'One'

Мой ViewModel довольно прост.

 public class TestViewModel : INotifyPropertyChanged
{
    public ObservableCollection<City> Cities { get; set; }

    public TestViewModel()
    {
        Cities = GetCities();
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] string name = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    }

    public ObservableCollection<City> GetCities()
    {
        return new ObservableCollection<City>
        {
            new City {Key = 1, Value = "Mumbai"},
            new City {Key = 2, Value = "New York"},
            new City {Key = 3, Value = "Milan"},
            new City {Key = 4, Value = "Rome"}
        };
    }
}

Нужно ли создавать свойство для индексации?На мой взгляд, проблема в том, что я нахожусь в списке и уже имею индекс для использования.

Спасибо за помощь, ребята

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете изменить свою модель:

 public class City
    {
        public int Key { get; set; }
        public string Value { get; set; }
        public List<string> Words { get; } = new List<string> { "One", "Two", "Three" };

        public string myValue
        {
            get
            {
                return Words[Key];
            }
            set {}
        }
    }

А в вашем .xmal просто установите Text="{Binding myValue}", и он отобразит значение элемента списка слов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...