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
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).