IMAGE Source dynamisch ändern in Xamarin Forms?

1 Antwort

Idealerweise wird dein Bild im XAML View definiert und du setzt die Source via Binding. Dein ViewModel sollte das INotifyPropertyChanged-Interface implementieren. So kannst du folgend ein Property wie dieses definieren:

private string _imageSource;

public string ImageSource
{
  get
  {
    return _imageSource;
  }
  set
  {
    if (_imageSource != value)
    {
      _imageSource = value;
      RaisePropertyChanged(nameof(ImageSource));
    }
  }
}

XAML:

<Image Source="{Binding ImageSource}" />

Wenn das Property geändert wird, wird das Image-Element im View automatisch geändert.

Ein anderes Beispiel für XAML DataBinding findest du hier in der Dokumentation.

Blackout001 
Fragesteller
 21.12.2019, 01:49

Ich habe schon ein Bild im XAML definiert und möchte ich halt nur es ändern abhängig vom Plattform, was du mir geschrieben hat, hat bei mir ein fehler gezeigt bei RaisPropertyChanged .. kann ich nicht direkt auf dem Image Source zugreifen ?

das ist mein Code in XAML :

<Image x:Name="HeaderImg" Source="LogoBG012" Grid.Row="0"/>
0
regex9  21.12.2019, 02:31
@Blackout001

1)

Dein ViewModel sollte das  INotifyPropertyChanged-Interface implementieren.

2)

Du kannst das Source-Property auch direkt setzen.

HeaderImg.Source = "some image path ...";

Allerdings ist es keine gute Praxis, Frontendlogik im Backend zu lösen. Das MVVM-Pattern löst diese Abhängigkeiten auf und unterteilt deutlich zwischen View (XAML), ViewModel und Model. Es wäre gut, wenn du dich mit dem genauer befassen würdest.

1
Blackout001 
Fragesteller
 21.12.2019, 02:43
@regex9

Ich werde mich darüber mehr informieren .. weil erlich gesagt, ich verstehe es nicht warum es keine gute Praxis ist Frontendlogik im Backend zu lösen !? Wenn du mir es kurz erklären kannst, wäre nett aber sonst ich werde ja im Internet mal schauen ob ich meine Antwort finden kann .. aber auf jeden Fall Danke dir

0
regex9  21.12.2019, 03:18
@Blackout001

Vorteile bei der Trennung:

  • Die eigentliche Logik (Geschäftslogik) wird von der reinen Darstellung getrennt. Diese Entkopplung ermöglicht mehr Flexibilität, Views können bspw. problemlos ausgetauscht werden, ohne viel Änderung am Quellcode vornehmen zu müssen.
  • Der Backend-Code wird übersichtlicher / strukturierter und wird (von Glue Code - also Code, der einzig dazu dient, zwischen den Programmteilen zu vermitteln) entlastet.
  • Durch die modulare / funktionale Trennung ist es viel einfacher, Tests (z.B. Unit-Tests) zu schreiben.
1
Blackout001 
Fragesteller
 21.12.2019, 03:31
@regex9

Du hast es einfach PERFEKT erklärt .. Danke dir noch mal ..

0