2016-06-30 13 views
1

ich comming, weil ich verstehe nicht, etwas über die Bindung ..Xamarin Forms - Etikett, Farbe und andere Attribute nicht aktualisiert, wenn ihre Binded Attribute gesetzt sind

Ich habe dieses Attribut in der C# -Code :

public string MyText { get; set; } 

und dann in der XAML-Teil:

<Label Text="{Binding MyText}"/> 

das erste Mal, es funktioniert, aber wenn ich MyText Zeichenfolge ändern, dann ist die <Label/> doe sn't update ..

Ich sah auch einige Post darüber, wo die Leute sprechen über INotifyChange oder so ähnlich, wie funktioniert diese Bindung? Warum ist das Update nicht konstant und warum funktioniert es nicht immer gleich?

Das Problem ist, dass mein Projekt ein bisschen komplex ist. Ich habe eine customCalendar ich selbst gemacht, die eine Grid "von mir wieder zu binden" an eine DayCase[6][7] wie Windows-Kalender ist, ist das Display das gleiche.

Also meine Frage ist doppelt, brauche ich 1 Funktion nach Attribut zu "hören" wenn einer von ihnen ändern? Weil ich im Beispiel nur über ein Label spreche, aber ich habe 1 Label bei DayCase, 3 Color zum updaten, einen Titel mit Monat/Jahr zum updaten usw.

Ich habe wirklich ehrlich verloren, da bin ich mir sicher wissen, wie man denkt, wie man es macht ..

Vielen Dank für Ihre Hilfe!

Antwort

1

Um bindende Arbeit zu machen. Ihre Ansichtsmodell muss INotifyPropertyChanged implementieren, es hat einen Handler public event PropertyChangedEventHandler PropertyChanged, die Xamarin.Forms' Bindungssystem mit hook up, und erstellen Sie eine Aufrufer dafür:

protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) 
     { 
      var eventHandler = PropertyChanged; 
      eventHandler?.Invoke(this, e); 
     } 

Danach, schreiben Sie Ihre Eigenschaft, wie binden werden dies:

private string _myText; 
    public string MyText 
    { 
     get { return _myText; } 
     set 
     { 
      if (_myText != value) 
      { 
       _myText = value; 
       OnPropertyChanged(new PropertyChangedEventArgs(nameof(MyText))); 
      } 
     } 
    } 

Einzelheiten lesen Sie bitte https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_bindings_to_mvvm/

auch gibt es andere MVVM Gerüste (MvvmCross, mvvm Licht, etc.) oder Xamarin.Forms.Lab schon getan für Sie einige Arbeit.

Für Ihre customCalendar Problem, da Bindung arbeiten zu lassen ist Property Ereignis aufrufen, können Sie eine Methode schreiben diese

public void UpdateDayCase(int i, int j, DayCase) 
{ 
    this.DayCases[i][j] = DayCase; 
    OnPropertyChanged(new PropertyChangedEventArgs(nameof(DayCases))); 
} 
+0

wie zu handhaben Wow, Ihre Antwort ist einfach perfekt! Alles funktioniert und es tut mir leid, ich habe deinen Schnitt nicht gesehen, was interessant ist, aber ich habe schon etwas selbst gemacht :) Danke trotzdem dafür;) Allerdings ist es ein bisschen langweilig dieses Duplizieren aber es funktioniert, das ist das Hauptziel ;) – Emixam23

Verwandte Themen