UI与ObservableCollection不相似

San*_*sal 1 c# wpf listview observablecollection

我正在尝试将ListView更改为我在ObvservableCollection中修改的任何值.

我目前正在使用它并将Collection绑定到我的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");
            }
        }
Run Code Online (Sandbox Code Playgroud)

问题是如果我使用以下代码:

TaskInit.TasksCollection[2].TaskNumber = "hi";
Run Code Online (Sandbox Code Playgroud)

即使它应该改变,该值仍然与前一个相同.

谁能指出我可能犯的问题?

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">
Run Code Online (Sandbox Code Playgroud)

任务类:

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));
        }
    }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ill 7

一个ObservableCollection将处理地方项目添加或从集合中删除的情况,但不会处理在集合中的项目的性质改变的情况.根据MSDN: 表示动态数据集合,在添加,删除项目或刷新整个列表时提供通知.

您需要确保您的Task类实现了INotifyPropertyChanged接口,并在其TaskNumber属性更改时触发PropertyChanged事件:

 private string _taskNumber;
 public string TaskNumber
 {
     get { return _taskNumber; }
     set
     {
         if(_taskNumber!= value)
         {
            _taskNumber= value;
            OnPropertyChanged("TaskNumber");
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

您的Task类实现了INotifyPropertyChanged,但是当它的属性值发生变化时,它实际上永远不会触发PropertyChanged事件.您需要在每个属性更改时手动调用OnPropertyChanged - 它不会自动发生.