2016-07-12 9 views
0

ich mein Label zu meinem Modell wich binden möchten funktioniert gut, aber der tatsächliche Wert der Immobilie erhalten nicht aktualisiert, ich implementiert auch INotifyPropertyChangedXamarin.Forms Bindung nicht das Etikett ui Aktualisierung

Bin ich etwas falsch machen hier ?

My Model

public string ErgebnisBasisPaketPreisString { 
    get 
    { 

     return _ergebnisBasisPaketPreis = (BasisPaketPreis[(int) Basispaket] * (BasisPaketInterval + 1)).ToString("C0"); 
    } 
    set 
    { 
     _ergebnisBasisPaketPreis = value; 

     OnPropertyChanged(nameof(ErgebnisBasisPaketPreisString)); 
    } 
} 

My Label:

<Label x:Name="LabelPreisBasispaketIntervall" 
     Text="{Binding ErgebnisBasisPaketPreisString}" 
     Grid.Column="3" 
     VerticalOptions="Center"/> 

Und ich bin die Bindung Kontext meiner Seite Inhalt festlegen.

Content:

public partial class GeräteKonfiguration : ContentPage { 

    public GeräteKonfiguration(User currentUser) { 
     InitializeComponent(); 

     _currentUser = currentUser; 
     Initialize(); 
    } 

    private User _currentUser; 
    private Gerät _currentGerät; 

    private void Initialize() { 


     _currentGerät = _currentUser.ServiceModuleAngebotObj.CurrentGerät; 
     LabelPreisBasispaketIntervall.SetBinding(Label.TextProperty, _currentGerät.ErgebnisBasisPaketPreisString); 
     LabelPreisBasispaketIntervall.BindingContext = _currentGerät; 
     BindingContext = _currentGerät; 
     ToolBarView.BackButton.Clicked += BackButtonOnClicked; 
     ToolBarView.BackButton.Text = "blabla"; 
     ToolBarView.TitleText = _currentGerät.Anwendung + " - " + _currentGerät.Antriebsart + 
           " - " + _currentGerät.Baureihe + " - " + _currentGerät.Typ; 
     LabelPreisBasispaketIntervall.Text = _currentGerät.ErgebnisBasisPaketPreisString; 

    } 
} 
+0

Ich möchte vorschlagen, 'EmptyConverter' hinzufügen und überprüfen, ob die Bindung funktioniert. –

+0

die Bindung funktioniert gut, weil meine Eigenschaften die Werte erhalten, nur die Beschriftung zeigt nicht den aktuellen Eigenschaftswert –

+0

Könnten Sie Code Ihrer 'ContentPage' hinzufügen? –

Antwort

1

Diese Zeile im Code hinter überschrieben wird Ihre Bindung durch den Beschriftungstext Bindung an was auch immer der Wert der Immobilie ist.

LabelPreisBasispaketIntervall.SetBinding(Label.TextProperty, _currentGerät.ErgebnisBasisPaketPreisString) 

Dies ist wahrscheinlich nicht einen gültigen Bindung Weg zu sein (die ErgebnisBasisPaketPreisString wäre), so dass die Bindung wird nicht funktionieren.

Sie dann den richtigen Anfangswert erhalten, indem es hier einstellen:

LabelPreisBasispaketIntervall.Text = _currentGerät.ErgebnisBasisPaketPreisString; 

entfernen diese beiden Linien, und sollte die Bindung arbeiten - Ihre XAML korrekt aussieht.

Zweitens verwendet Ihr Eigenschaften-Getter nicht den Wert, den Sie festgelegt haben - Sie berechnen ihn jedes Mal neu. Ihre Immobilie sollte wahrscheinlich nur sein:

public string ErgebnisBasisPaketPreisString 
{ 
    get { return _ergebnisBasisPaketPreisString; } 
    set 
    { 
     _ergebnisBasisPaketPreisString = value; 
     OnPropertyChanged(nameof(ErgebnisBasisPaketPreisString)); 
    } 
} 

Und Sie können den anfänglichen berechneten Wert im Konstruktor festlegen. Oder halten Sie sich an die berechnete Eigenschaft und heben Sie die Eigenschaft in den abhängigen Eigenschaften geändert:

public string ErgebnisBasisPaketPreisString 
{ 
    get { return BasisPaketPreis[(int) Basispaket] * (BasisPaketInterval + 1)).ToString("C0"); } 
} 

public string Basispaket 
{ 
    get { return _basispaket; } 
    set 
    { 
     _basispaket = value; 
     OnPropertyChanged(nameof(Basispaket)); 
     OnPropertyChanged(nameof(ErgebnisBasisPaketPreisString)); 
    } 
} 

// and similar for the other properties that are used in the computation 
+0

Danke für Ihre Antwort Ich habe beide entfernt, aber sobald ich den Wert der Eigenschaft ändern, zeigt mein Label immer noch den alten Wert und nicht das neue. Fehle ich etwas? –

+0

@iNCEPTiON_ Ich habe aktualisiert, es scheint auch, dass die Eigenschaft falsch ist und immer den gleichen Wert zurückgibt. –

+0

ich kann es immer noch nicht zur arbeit bringen ... ich muss einige propertys berechnen und dann das label aktualisieren, in dem ich kalkuliere? –

Verwandte Themen