簡體   English   中英

將標簽的文本綁定到 Xamarin forms c# 中的變量

[英]Binding Label's Text to a Variable in Xamarin forms c#

所以我試圖創建一個簡單的應用程序,比如購物應用程序。 所以我有類別和每個類別的多個項目,當您選擇一個項目時,您將有可能增加您需要的項目數量或刪除該項目。 例如,我選擇了三個項目,所以我的購物車有 3 個項目,每個項目都有一個添加按鈕和一個刪除按鈕。 當我點擊添加按鈕時,顯示的項目數量應該會增加,依此類推。

所以到目前為止我所做的是創建一個包含我所有類別的 JSON 文件,一旦我點擊一個類別,我就會反序列化另一個包含我所有項目的 JSON 文件,所以顯示的項目當然取決於我選擇的類別.

現在,每次我選擇一個項目時,它都會被添加到購物車中,並顯示在底部頁面上,並帶有 + 和 - 按鈕等等。

所以我創建了一個類別 class 來反序列化我的 json,並創建一個對象 class 來反序列化我的項目的 Z46436DEEC76ECDF3524DZ1 我在對象 class 中實現了 INotifyChangedProperty,這樣每當所選項目的數量增加時我就可以繼續顯示,所以基本上這就是我的 ViewModel,但我想這就像我需要每個創建項目的 ViewModel? 所以我想我真正需要使用的是 ObservableCollection..

我希望我能很好地解釋一切,並等待您對我做對或錯以及我應該如何繼續得到我想要的東西的反饋。 太感謝了

問題是要將綁定上下文設置為我的“Objets”Class 我必須將 arguments 放入其中,然后我的 Label 會得到一個精確的值...我應該怎么做?

我做了一個關於你的 model 的樣品,你可以看看:

<ContentPage.Content>
    <StackLayout>
        <Label x:Name="label1" />

        <Button
            x:Name="btn1"
            Clicked="Btn1_Clicked"
            Text="change value" />
    </StackLayout>
</ContentPage.Content>


public partial class Page15 : ContentPage
{
    public Objets model { get; set; }
    public Page15()
    {
        InitializeComponent();
        model= new Objets("test 1", 1.001f, " test11111", 12);
        this.BindingContext = model;
        label1.SetBinding(Label.TextProperty, "nbr_objet");
    }

    private void Btn1_Clicked(object sender, EventArgs e)
    {
        model.nbr_objet = 20;
    }
}
public class Objets : INotifyPropertyChanged
{
    public string Designation { get; set; }
    public float Prix { get; set; }
    public string imageUrl { get; set; }
    private int Nbr_Objet;

    public int nbr_objet
    {
        get { return Nbr_Objet; }
        set
        {
            Nbr_Objet = value;
            RaisePropertyChanged("nbr_objet");
        }
    }



    public Objets(string Designation, float Prix, string imageUrl, int Nbr_Objet)
    {
        this.Designation = Designation;
        this.Prix = Prix;
        this.imageUrl = imageUrl;
        this.Nbr_Objet = Nbr_Objet;
    }

    public event PropertyChangedEventHandler PropertyChanged;


    public void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

更新:

但我想這就像我需要每個創建項目的 ViewModel 一樣? 所以我想我真正需要使用的是 ObservableCollection..

你說你有三個分類,每個分類有很多項目,如果你在ListView中顯示這些,分類被用作組header,我建議你可以為不同的分類使用相同的model,然后添加Observablecollection,因為它已經實現了 INotifyPropertyChanged 接口。

關於 ListView 組,你可以看看:

https://github.com/xamarin/xamarin-forms-samples/tree/master/UserInterface/ListView/Grouping

如果你還有其他問題,我建議你可以創建一個新線程來問,因為這個線程很長。

請記住將有用的回復標記為答案,謝謝。

以編程方式設置綁定

// set the BindingContext for the page
this.BindingContext = new MyViewModel();

// Title is a public property on MyViewModel
myLabel.SetBinding(Label.TextProperty, "Title");

為了在 VM 更改時 UI 更新,VM 需要實現INotifyPropertyChanged

這是一些可能有助於解決您的問題的指導。 你的代碼很亂,我認為這會導致你的困惑(你有幾個名字非常相似的東西)。

int Nbr_Objet;

public int nbr_objet { get{...} set {...}}

this.Nbr_Objet= Nbr_Objet;

這表明您正在直接設置您的成員變量Nbr_Objet ,當您這樣做時,屬性更改通知不會觸發 - 您需要通過公共nbr_objet分配值才能發生這種情況。

我建議您在 XAML 中定義綁定,並確保綁定到屬性nbr_objet ,而不是私有成員變量(字段) Nbr_Objet 如果您想避免混淆,請遵循 C# 編碼標准並將您的成員變量命名為_nbrObjet ,並將您的屬性名稱駝峰式命名public int NbrObjet { get {...

暫無
暫無

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

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