Laden...

Einfache ListView in Xamarin ist leer

Erstellt von Flachmann vor 5 Jahren Letzter Beitrag vor 5 Jahren 955 Views
F
Flachmann Themenstarter:in
4 Beiträge seit 2018
vor 5 Jahren
Einfache ListView in Xamarin ist leer

Hallo,

ich bin noch ziemlicher Xamarin-Anfänger und hangel mich so langsam von Hürde zu Hürde. Ich benutze VS 2017, Version 15.9.2. Hier im Forum lese ich schon einige Zeit mit und fand auch einige Anregungen. 😁

Nun habe ich ein Problem, bei dem ich nicht mehr weiter weiß. Wahrscheinlich übersehe ich etwas ganz einfaches, aber ich weiß nicht weiter. Für mich sieht alles richtig aus, habe das auch mit diversen Beispielen aus dem INet verglichen.Die ListView mit Property-Binding ist wirklich einfach. Aber die gebundenen Inhalte werden nicht angezeigt.

Wenn ich aber einen Wert auswähle - egal ob 'Tapped' oder 'Selected', erhalte ich die korrekten Informationen zurück, d.h. die Liste funktioniert prinzipiell, die Inhalte werden halt nur nicht angezeigt.

Meine einfache Liste besteht aus HistoryEntry-Elementen:

namespace TestList
{
    public class HistoryEntry
    {
        public string Keyword;
        public double Result;
        public DateTime Update;
    }
}

und wird hier angezeigt:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="TestList.HistoryList"
             Title="History List">

    <ListView x:Name="listHistory" ItemTapped="ItemTapped">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout>
                        <StackLayout Orientation="Horizontal">
                            <Label Text="{Binding Keyword}" TextColor="Black" HorizontalOptions="StartAndExpand" />
                            <Label Text="{Binding Result, StringFormat={}{0:G}}" TextColor="DarkSlateGray" HorizontalOptions="End" />
                        </StackLayout>
                        <Label Text="Testtext damit was angezeigt wird" FontSize="Micro" TextColor="DimGray" HorizontalOptions="StartAndExpand" />
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

</ContentPage>
namespace TestList
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class HistoryList : ContentPage
    {
        public HistoryList()
        {
            InitializeComponent();

            var list = new List<HistoryEntry>()
            {
                new HistoryEntry
                {
                    Keyword = "Astrotest",
                    Result = 7.0,
                    Update = DateTime.Now
                },
                new HistoryEntry
                {
                    Keyword = "Zwentyone",
                    Result = 21.0,
                    Update = DateTime.Now
                },
                new HistoryEntry
                {
                    Keyword = "Und DIE Antwort?",
                    Result = 42.0,
                    Update = DateTime.Now
                }
            };

            listHistory.ItemsSource = list;
        }

        private void ItemTapped(object sender, ItemTappedEventArgs e)
        {
            if (e.Item == null) return;

            HistoryEntry sel = (HistoryEntry)e.Item;
            // [...]
        }
    }
}

Das Ergebnis habe ich als Screenshot angehängt, ist halt die Liste ohne die gebundenen Werte.

Ich habe extra die Zeile mit "Testtext" in die Details gepackt, damit man sieht, dass etwas angezeigt wird. Es ist auch egal, ob ich eine ObservableCollection verwende oder die Daten in einer <TextCell /> oder so anzeige.

Danke für einen Tipp was ich hier falsch mache.

Gruß,


/
/lachmann

16.828 Beiträge seit 2008
vor 5 Jahren

Du verwendest in Deiner History Class ausschließlich Fields: bei XAML muss das Binding jedoch über Properties erfolgen - und nicht mit Fields.
Bzw gilt das allgemein für Bindings.

Fields sollten ohnehin nur private verwendet werden!
[Artikel] C#: Richtlinien für die Namensvergabe

F
Flachmann Themenstarter:in
4 Beiträge seit 2018
vor 5 Jahren

Oh, Mann. Vielen Dank, da hätte ich noch ewig weiter gesucht.

Ein einfaches { get; set; } hat geholfen. 👍

Gruß,


/
/lachmann