Xamarin Forms将标签文本绑定到字典的值

问题描述 投票:1回答:1

我有问题。我试图将标签绑定到字典的值,所以我将在字典中获取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();
        }
    }
}

但是运行该应用程序后,没有显示任何文字!?

我在做什么错?

c# xamarin xamarin.forms xamarin.android xamarin.ios
1个回答
1
投票

所以我将在字典中得到每个值的标签。

也许您可以使用代码从字典中获取每个值,如下所示:

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)]);
}

但是无法在LabelScrollView中直接显示。

[我建议使用ListView显示循环列表,可以将ObservableCollection<Model>用作ItemSourceListView。然后将其轻松地显示在listview的每个单元格中。

您可以创建Model类:

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
中,在ContentPage中添加ListView:

<?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> 不要忘记在

ContenPage.cs
中绑定ItemSource:

public MainPage() { ViewModel viewmodel = new ViewModel(); EmployeeView.ItemsSource = viewmodel.employees ; } [这里您可以将ViewModel视为Dictionaryemployees包含每个单元格中的键值数据。此外,您可以在Employee中添加更多属性,然后您的单元格将显示更多样式。关于listview中的custom data,您可以查看此文档以了解更多信息。

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
a sample供参考。
© www.soinside.com 2019 - 2024. All rights reserved.