2012-11-21 51 views
1

我有一個ListBox,將整個綁定對象傳遞給轉換器(需要),並且對象似乎沒有正確更新。下面是相關的XAML將整個對象與轉換器綁定爲文本

<TextBlock 
      Text="{Binding Converter={StaticResource DueConverter}}" 
      FontSize="{StaticResource PhoneFontSizeNormal}" 
      Foreground="{StaticResource PhoneDisabledBrush}" /> 

和轉換器

public class DueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value == null) return null; 
     Task task = (Task)value; 
     if (task.HasReminders) 
     { 
      return task.Due.Date.ToShortDateString() + " " + task.Due.ToShortTimeString(); 
     } 
     else 
     { 
      return task.Due.Date.ToShortDateString(); 
     } 
    } 

    //Called with two-way data binding as value is pulled out of control and put back into the property 
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

最後到期日期時間從數據模型。

private DateTime _due; 

    [Column(CanBeNull=false)] 
    public DateTime Due 
    { 
     get { return _due; } 
     set 
     { 
      if (_due != value) 
      { 
       NotifyPropertyChanging("Due"); 
       _due = value; 
       NotifyPropertyChanged("Due"); 
      } 
     } 
    } 

的NotifyPropertyChanging /更改工作,因爲結合於不同性質的其他控件正確地更新。

我的目標是每當Due被更改時都有更新的TextBlock更新,但輸出的格式依賴於Task對象的另一個屬性。

有什麼想法?

+0

一般來說,SO協議不會在標題中加標籤。我更新了標題並重新標記了問題。 –

+0

謝謝你這樣做。 – upopple

回答

0

TextBlock.Text屬性綁定到任務實例,它不關心「到期」。每當您更改「到期」的值時,您還需要提升「任務」的屬性更改事件,以便爲該綁定更新自身。

+0

我該怎麼做?不應該用函數'private void NotifyPropertyChanged(string propertyName)自動提升 如果(PropertyChanged!= null) { PropertyChanged(this,new PropertyChangedEventArgs(propertyName)); } }'在datacontext? – upopple

+0

如果綁定到諸如「到期」之類的屬性,它將會,因爲代碼會在setter中調用NotifyPropertyChanged。但是在你的代碼中,你直接綁定到Task的一個實例,而不是它的屬性。這取決於你如何綁定Task實例,但是無論何時您希望Text =「{Binding Converter = {StaticResource DueConverter}}」更新自己,都必須在代碼中引發NotifyPropertyChanged(「name_of_your_task_property」)。如何創建/設置用作ListBox的ItemsSource的數據? – trydis