2012-08-09 58 views
0

我想讓ListView更改爲我在ObvservableCollection中修改的任何值。UI不類似ObservableCollection

我目前使用這和收藏結合我的ListView

private ObservableCollection<Task> _tasks = TaskInit.TaskCollection; 
     /// <summary> 
     /// Observable Collection to hold all tasks 
     /// </summary> 
     /// 

     public ObservableCollection<Task> TasksCollection 
     { 
      get { return _tasks; } 
      set 
      { 
       _tasks = value; 
       NotifyPropertyChanged("TasksCollection"); 
      } 
     } 

的問題是如果我是使用下面的代碼:

TaskInit.TasksCollection[2].TaskNumber = "hi"; 

值仍然是相同的如前所述,即使它應該改變。

任何人都可以指出我可能做的問題嗎?

的XAML的第一行是:

<ListView SelectionMode="Single" ScrollViewer.CanContentScroll="True" x:Name="listTasks" Margin="0,0,0,35" Background="{x:Null}" BorderBrush="{x:Null}" ItemsSource="{Binding TasksCollection, Mode=TwoWay}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" FontFamily="Myriad Pro" Foreground="{x:Null}" IsSynchronizedWithCurrentItem="True"> 

任務類別:

public class Task : INotifyPropertyChanged 
    { 
     /// <summary> 
     /// 
     /// </summary> 
     public string Module { get; set; } 
     /// <summary> 
     /// 
     /// </summary> 
     public string FirstValue { get; set; } 
     /// <summary> 
     /// 
     /// </summary> 
     public string SecondValue { get; set; } 
     /// <summary> 
     /// 
     /// </summary> 
     public string ThirdValue { get; set; } 
     /// <summary> 
     /// 
     /// </summary> 
     public int Minutes { get; set; } 

     /// <summary> 
     /// 
     /// </summary> 
     public string TaskNumber { get; set; } 

     /// <summary> 
     /// 
     /// </summary> 
     public string Story1 { get; set; } 

     /// <summary> 
     /// 
     /// </summary> 
     public string Story2 { get; set; } 

     /// <summary> 
     /// 
     /// </summary> 
     public string Story3 { get; set; } 

     /// <summary> 
     /// 
     /// </summary> 
     public string NetworkAdapter { get; set; } 

     public event PropertyChangedEventHandler PropertyChanged; 

     protected virtual void OnPropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

回答

6

一個ObservableCollection將處理其中項目被添加或從集合中刪除的情況下,但它不會處理集合中的項目屬性發生變化的情況。 As per MSDN:表示動態數據集合,用於在項目添加,刪除或整個列表刷新時提供通知。

你需要確保你的任務類實現INotifyPropertyChanged接口,和火災的PropertyChanged事件時,其TaskNumber屬性更改:

private string _taskNumber; 
public string TaskNumber 
{ 
    get { return _taskNumber; } 
    set 
    { 
     if(_taskNumber!= value) 
     { 
      _taskNumber= value; 
      OnPropertyChanged("TaskNumber"); 
     } 
    } 
} 

你的任務類實現INotifyPropertyChanged,但它從來沒有真正觸發的PropertyChanged事件當其屬性的值發生變化時。您需要在每個屬性更改時手動調用OnPropertyChanged - 它不會自動發生。

+0

對不起,我有點困惑,就在你展示的'public string task'部分。我用我的任務類更新了我的問題。 – 2012-08-09 22:07:25

+0

看我的編輯。你的TaskNumber屬性應該看起來像這樣。 – 2012-08-09 22:10:39

+0

完美工作,從來不知道這是一個簡單的修復。謝謝 – 2012-08-10 08:18:00

相關問題