繁体   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