2016-07-12 7 views
0

を更新していない結合は正常に動作しますが、プロパティの実際の値が更新され、私もINotifyPropertyChangedXamarin.Formsは、私は私のモデルウィッヒに私のラベルをバインドしたいラベルのUI

を実装しません。私はここで何か間違ったことをやっています?

マイモデル

public string ErgebnisBasisPaketPreisString { 
    get 
    { 

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

     OnPropertyChanged(nameof(ErgebnisBasisPaketPreisString)); 
    } 
} 

マイレーベル:

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

そして、私は私のコンテンツページへのバインディングコンテキストを設定しています。

ContentPage:

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

私はEmptyConverterを追加してバインディングが機能しているかどうかを確認することをお勧めします。 –

+0

プロパティが値を取得しているためバインディングが正常に機能していますが、ラベルには現在のプロパティ値が表示されません –

+0

'ContentPage'のコードを追加できますか? –

答えて

1

この行の後ろにあなたのコード内では、プロパティの値が何であれにラベルテキストを結合することによって、あなたのバインディングを上書きしています。

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

これは(ErgebnisBasisPaketPreisStringだろう)、有効な結合パスになりそうではありませんので、バインディングが動作しません。

次に、ここでそれを設定することにより、正しい初期値を取得する:

LabelPreisBasispaketIntervall.Text = _currentGerät.ErgebnisBasisPaketPreisString; 

は、これらの行の両方を削除し、そして結合は動作するはずです - あなたのXAMLは正しく見えます。

第2に、プロパティゲッターは設定した値を使用しません。毎回それを再計算します。プロパティはおそらく次のようになります:

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

コンストラクタで初期計算値を設定できます。または、計算されたプロパティに固執し、従属プロパティで変更されたプロパティを上げてください:

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

あなたの答えをありがとう私はそれらの両方を削除しましたが、私はプロパティの値を変更するとすぐに私のラベルはまだ新しい値ではなく古い値を表示します。何か不足していますか? –

+0

@iNCEPTiON_私は更新しました。また、プロパティが間違っていて、常に同じ値を返します。 –

+0

私はまだそれを働かせることはできません...私はいくつかのpropertysを計算し、ラベルを更新する必要がありますか? –

関連する問題