簡體   English   中英

Xamarin.Forms 綁定不更新標簽 ui

[英]Xamarin.Forms binding not updating the label ui

我想將我的標簽綁定到我的模型,該模型工作正常,但屬性的實際值沒有更新,我還實現了INotifyPropertyChanged

我在這里做錯了嗎?

我的模特

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"/>

我正在為我的內容頁面設置綁定上下文。

內容頁:

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;

    }
}

后面代碼中的這一行通過將標簽文本綁定到屬性的任何值來覆蓋您的綁定。

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

這不太可能是有效的綁定路徑(應該是ErgebnisBasisPaketPreisString ),因此綁定將不起作用。

然后,您可以通過在此處設置來獲得正確的初始值:

LabelPreisBasispaketIntervall.Text = _currentGerät.ErgebnisBasisPaketPreisString;

刪除這兩行,綁定應該可以工作 - 您的 XAML 看起來是正確的。

其次,您的屬性 getter 不使用您設置的值 - 您每次都重新計算它。 您的財產可能應該是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM