Laden...

Xamarin StackLayout über ViewModel darstellen

Erstellt von Loofsy vor 2 Jahren Letzter Beitrag vor 2 Jahren 279 Views
L
Loofsy Themenstarter:in
32 Beiträge seit 2020
vor 2 Jahren
Xamarin StackLayout über ViewModel darstellen

Hallo,

ich versuche mich gerade an meiner ersten Xamarin App. Nachdem ich auf der default Page (die von Visual Studio generiert wurde) ein bisschen Experimentiert habe, möchte ich nun den Content nicht über XAML schreiben sondern zb. einen Text oder Content zb aus einer MSSQL oder MySQL Datenbank holen.

Ich scheitere jedoch bereits daran, dass ich es nicht mal schaffe, ein einfaches Label über eine ViewModel darzustellen.

Mein C# Code:


using System;
using System.Windows.Input;
using Xamarin.Essentials;
using Xamarin.Forms;

namespace MyApp.ViewModels
{
    public class AboutViewModel : BaseViewModel
    {
        public AboutViewModel()
        {
            //Title = "About";
            OpenWebCommand = new Command(async () => await Browser.OpenAsync("https://aka.ms/xamarin-quickstart"));
        }

        public ICommand OpenWebCommand { get; }

        public void Display()
        {
            StackLayout al = new StackLayout
            {
                Children =
                {
                    new Button
                    {
                        Text = "Test",
                        TextColor = Color.Red,
                        

                    }
                }
            };


            
        }
    }
}

Ich weiss bereits das die Methode Display() an die Property MainPage in der class App übergebenwerden muss (da wo standart nur AppShell() übergeben wird (MainPage = new AppShell()😉

Wenn ich das aber (unter einbindung der class AboutViewModel) mache bekomme ich keinen Inhalt angezeigt. Eigentlich sollte ein Label mit "Test" in Roter Schriftfarbe angezeigt werden.

Auf binded-viewmodel-content-to-stacklayout habe ich zwar die einbindung über XAML gefunden:.....


<ContentPage x:Name="ParentView">

     <ScrollView x:Name = "CategoriesScrollView">
          <controls:CustomStackLayout Orientation="Horizontal" Spacing="20" Items = "{Binding BindingContext.CategoryName, Source={x:Reference ParentView}}" />
     </ScrollView>

... verstehe aber nicht WO der punkt ist im zb. Display() einzufügen

wär super wenn mir da jemand helfen könnte

lg

4.931 Beiträge seit 2008
vor 2 Jahren

Du solltest nur Daten über das ViewModel bereitstellen, keine UI-Controls.
Erzeuge eine ObservableCollection<string>-Eigenschaft im ViewModel und binde daran (statt string kannst du aber auch eine eigene Daten-Klasse benutzen).
Als (englische) Beispiele habe ich u.a. Xamarin Forms MVVM - ObservableCollection sowie Xamarin.Forms - Bindable Layout dazu gefunden.

PS: Deine Aussagen bzgl. deiner Display-Methode und AppShell scheinen aber falsch zu sein, s. z.B. Erstellen einer Xamarin.Forms-Shellanwendung (die MainPage ist ja das Hauptfenster der Anwendung, während dein in Display definiertes StackLayout-Element nur ein untergeordnetes UI-Control ist).