Xamarin Forms Привязать текст метки к значению словаря - PullRequest
1 голос
/ 21 января 2020

У меня проблема. Я пытаюсь привязать мою метку к значению моего словаря, чтобы я мог получить значение метки foreach в словаре. Теперь вот мой код:

<ScrollView x:Name="categoryScrollView" HeightRequest="40" Orientation="Horizontal"
        VerticalScrollBarVisibility="Never" HorizontalScrollBarVisibility="Never" HorizontalOptions="FillAndExpand">
    <Frame CornerRadius="20" BackgroundColor="Black" BorderColor="DarkGray" HeightRequest="40">
        <Label Text="{Binding categoryCollection[Value]}" FontSize="18" HorizontalTextAlignment="Center" 
                                VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand" TextColor="White" x:Name="txtCategory" />
    </Frame>
</ScrollView>

И, как вы можете видеть, categoryCollection - это мой словарь.

Вот ViewModel:

private Dictionary<int, string> _categoryCollection;
public Dictionary<int, string> categoryCollection
{
    get
    {
        return _categoryCollection;
    }
    set
    {
        if (_categoryCollection != value)
        {
            _categoryCollection = value;
            OnPropertyChanged();
        }
    }
}

Но после запуска приложение, текст не отображается!?

Что я делаю не так?

1 Ответ

1 голос
/ 21 января 2020

, чтобы я мог получить значение foreach для метки в словаре.

Возможно, вы можете использовать код для получения каждого значения из словаря следующим образом:

Dictionary<int, string> dict = new Dictionary<int, string>(){{1,"One"},{2, "Two"},{3,"Three"}}; 

for (int i = 0; i < dict.Count; i++)
{
    Console.WriteLine("Key: {0}, Value: {1}", dict.Keys.ElementAt(i), dict[ dict.Keys.ElementAt(i)]);
}

Однако это не может быть отображено в Label или ScrollView точно.

Я предлагаю использовать ListView для отображения списка l oop, ObservableCollection<Model> можно использовать как ItemSource для ListView. Тогда он будет легко отображаться в каждой ячейке списка.

Вы можете создать Модель класс:

public class Employee
{
    public int DisplayID {get; set;}
    public string DisplayName {get; set;}
}

Затем в ViewModel можно установить пример данных:

ObservableCollection<Employee> employees = new ObservableCollection<Employee>();
public ObservableCollection<Employee> Employees { get { return employees; }}

public ViewModel()
{
    // is set and the UI will react to changes
    employees.Add(new Employee{ DisplayID = 1 , DisplayName="Rob Finnerty"});
    employees.Add(new Employee{ DisplayID = 2 , DisplayName="Bill Wrestler"});
    employees.Add(new Employee{ DisplayID = 3 , DisplayName="Dr. Geri-Beth Hooper"});
    employees.Add(new Employee{ DisplayID = 4 , DisplayName="Dr. Keith Joyce-Purdy"});
    employees.Add(new Employee{ DisplayID = 5 , DisplayName="Sheri Spruce"});
    employees.Add(new Employee{ DisplayID = 6 , DisplayName="Burt Indybrick"});
}

Теперь в Xaml , добавить ListView в ContentPage:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:constants="clr-namespace:XamarinFormsSample;assembly=XamarinFormsXamlSample"
             x:Class="XamarinFormsXamlSample.Views.EmployeeListPage"
             Title="Employee List">
  <ListView x:Name="EmployeeView"
            ItemsSource="{Binding Employees}">
    <ListView.ItemTemplate>
      <DataTemplate>
        <TextCell Text="{Binding DisplayName}" />
      </DataTemplate>
    </ListView.ItemTemplate>
  </ListView>
</ContentPage>

Не забудьте связать ItemSource в ContenPage.cs :

public MainPage()
{
    ViewModel viewmodel = new ViewModel();
    EmployeeView.ItemsSource = viewmodel.employees ;
}

Здесь вы можете рассмотреть ViewModel, так как Dictionary, employees содержит данные Key-Value в каждой ячейке. Кроме того, вы можете добавить дополнительные свойства в Employee , тогда ваша ячейка будет отображать гораздо больше стилей. О пользовательских данных в списке просмотра, вы можете взглянуть на этот do c, чтобы узнать больше об этом. * 1 043 *

enter image description here

============================= == Обновление ========================================

Если вам нужен горизонтальный просмотр списка, вы можно использовать CollectionView для его реализации следующим образом:

<CollectionView ItemsSource="{Binding Monkeys}">
    <CollectionView.ItemsLayout>
        <LinearItemsLayout Orientation="Horizontal" />
    </CollectionView.ItemsLayout>
    <CollectionView.ItemTemplate>
       <DataTemplate>
           ...
       </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView>

enter image description here

Существует образец для справки.

...