2017-06-22 7 views
0

Ich habe eine Xamarin Forms App. Es gibt 2 Klassen mit Daten, eine der Seiten füllt die Daten.Xamarin Formulare - Übergabe von Daten zwischen Seiten und Ansichten

Das Problem ist: Ich erstelle eine neue Ansicht, die Daten aus beiden Klassen verwenden soll.

Die einzige Art, wie ich mit vertraut bin, ist eine Klasse als bindingContext einstellen Daten zwischen den Seiten zu übergeben, und es funktioniert gut mit ONE Klasse, weil es offenbar nicht 2 bindingContext zugleich sein könnte.

Beispiel:

1. Klasse (alle Klassen auf der vorherigen Seite gefüllt sind einfach zu akzeptieren, dass sie gefüllt sind.)

public class Buildings : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 

     private string _id; 

     public string Id 
     { 
      get { return _id; } 
      set 
      { 
       _id = value; 
       PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Id")); 
      } 
     } 
} 

2. Klasse

public class Flats : INotifyPropertyChanged 
     { 
      public event PropertyChangedEventHandler PropertyChanged; 

      private string _num; 

      public string Num 
      { 
       get { return _num; } 
       set 
       { 
        _num = value; 
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Num")); 
       } 
      } 
    } 

neue Ansicht:

public partial class HouseView 
    { 
     private Flats _flats; 
     private Buildings _buildings; 
     public HouseView() 
     { 
      InitializeComponent(); 
     } 

     private void HouseView_OnBindingContextChanged(object sender, EventArgs e) 
     { 
      var building = BindingContext as Building; 
      //var flat = BindingContext as Flat; 
      //_flat = flat; 
      _building = building; 
      var buildingInfo = await Rest.GetHouseInfo(_building.Id, _flat.Num); //function that will return info on a current house; 
      // rest code 
     } 
    } 

Vielleicht ist kein Bindekontext notwendig, weil ich nur die Parameter übergebe und sie nicht in einer Ansicht ändere? Ich denke, die Lösung kann ziemlich einfach sein, und ich kann es nicht herausfinden ....

+0

Ihre Situation ist mir unklar. Können Sie ein Beispiel geben? Wo benutzt du die Klassen, wie viele Seiten hast du? Je nachdem, was Sie tatsächlich erreichen möchten, gibt es mehrere Lösungen. –

+0

können Sie Daten über den Konstruktor, eine öffentliche Eigenschaft, eine öffentliche Methode usw. an eine Klasse/Sicht übergeben - es gibt viele Möglichkeiten, sich ihr zu nähern. Es ist nicht klar, was genau das Problem ist, das Sie haben. – Jason

Antwort

1

Was Sie vermissen ist das Verständnis des Konzepts von ViewModel, und es ist Beziehung mit den Ansichten .. In diesem Fall, was Sie brauchen, ist ein 3. Klasse (Ansichtsmodell), die Ihre zwei vorherigen Klasse verarbeitet:

public class HouseViewModel : INotifyPropertyChanged 
{ 
    public Flats Flats { get; set; } 
    private Buildings Buildings { get; set; }  
} 

auch mit OnBindingContextChanged nur chaotisch und wird einige Leistung Ihrer App nehmen .. versuchen, Ihre Daten, bevor Sie den VM vorzubereiten, so dass die Aussicht weiß wie so wenig wie möglich zu bekommen/Umgang mit Daten.

Verwandte Themen