簡體   English   中英

Windows Phone:數據綁定不會更新界面中的值

[英]Windows Phone: Data binding does not update the value in the interface

我的MainPage中有一個Textblock項,它綁定了myClass對象的值。 我還有一個按鈕,用於更改此對象的屬性的值。 盡管單擊按鈕並實現INotifyPropertyChanged接口時會更新值,但表示的值不會更改。 這是我的代碼:

public class myClass : INotifyPropertyChanged
{
    //Fields declaration <---------------------------------------------------->

    private int lifetime;
    private DateTime startingDate;
    private string brand;
    private double power;

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    public int Lifetime {
        get
        {
            return lifetime;
        }
        set
        {
            if (value != lifetime)
            {
                lifetime = value;
                NotifyPropertyChanged("Lifetime");
            }

        }
    }

    public DateTime StartingDate {
        get
        {
            return startingDate;
        }
        set
        {
            if (value != startingDate)
            {
                startingDate = value;
                NotifyPropertyChanged("StartingDate");
            }
        }
    }

    public string Brand
    {
        get
        {
            return brand;
        }
        set
        {
            if (value != brand)
            {
                brand = value;
                NotifyPropertyChanged("Brand");
            }
        }
    }

    public double Power
    {
        get
        {
            return power;
        }
        set
        {
            if (value != power)
            {
                power = value;
                NotifyPropertyChanged("Power");
            }
        }
    }

    public int DaysRemaining
    {
        get
        {
            return Lifetime - (DateTime.Now - StartingDate).Days;
        }
    }

    //Functions declaration <------------------------------------------------>

    public ContactLens()
    {
        StartingDate = new DateTime();
    }


} 

並且更改startingDate值的按鈕函數,因此也應更改DaysRemaining值。

    private void leftButtonChange_Click(object sender, RoutedEventArgs e)
    {
        Model.Left.StartingDate = DateTime.Now;


    }

    private void rightChangeButton_Click(object sender, RoutedEventArgs e)
    {
        Model.Right.StartingDate = DateTime.Now;

    }

編輯:我創建了一種更新日期並再次計算DaysRemaining的方法,但是盡管textBlock綁定到StartingDate更改值,但DaysRemaining值要求應用重新啟動才能進行更改:

private void leftButtonChange_Click(object sender,RoutedEventArgs e){Model.Left.Replace();
}

    private void rightChangeButton_Click(object sender, RoutedEventArgs e)
    {
        Model.Right.Replace();
    }

和主類功能:

   public void Replace()
    {
        MessageBox.Show("" + daysRemaining);
        StartingDate = DateTime.Now;
        UpdateDaysRemaining();
        MessageBox.Show("" + daysRemaining);

    }

您的StartingDate屬性會觸發更改通知,以便直接綁定到該對象的任何內容都會更新,但DaysRemaining屬性不會觸發更改通知。 DaysRemaining需要觸發更改通知,以使綁定到它的對象知道它們需要更新。

DaysRemaining有點奇怪,因為它是根據其他三個值計算的,而不是顯式設置的。

將DaysRemaining保留到StartingDate和Lifetime非常容易:它們在同一個類中緊密相關,StartingDate和Lifetime只是根據其設置者而改變。 您可以讓BeginningDate和Lifetime在DaysRemaining都更改時觸發更改通知,StartingDate和Lifetime可以設置DaysRemaining,以便DaysRemaining可以觸發其自己的通知,或者DaysRemaining可以偵聽StartingDate和Lifetime的更改通知(這可能是過分的了)。

棘手的部分是DaysRemaining將隨着DateTime.Now更改。 DateTime.Now在類的外部,並且更改的頻率比您關心的要頻繁得多。 您只關心(DateTime.Now-StartingDate).Days何時更改,這是可以預見的。 而不是綁定到DateTime.Now,我將計算Days何時更改,並設置一個計時器以在更改時更新DaysRemaining。

暫無
暫無

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

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