[英]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.