Tôi hiện đang sử dụng bộ sưu tập quan sát để lưu trữ các đối tượng dữ liệu của mình cho một ListView. Việc thêm các đối tượng mới vào bộ sưu tập hoạt động tốt và các cập nhật listView đúng. Tuy nhiên khi tôi cố gắng thay đổi một trong các thuộc tính của một đối tượng trong bộ sưu tập thì listView sẽ không cập nhật đúng. Ví dụ, tôi có một bộ sưu tập DataCollection có thể quan sát được. Tôi thửListView không được cập nhật chính xác với ObservableCollection
_DataCollections.ElementAt(count).Status = "Active";
Tôi thực hiện thay đổi này trước khi hoạt động lâu do nhấn nút. ListView sẽ không phản ánh thay đổi. Vì vậy, tôi thêm myListView.Items.Refresh()
; Điều này làm việc, tuy nhiên listView không được làm mới cho đến khi phương thức button_click hoàn tất, điều này không tốt bằng cách đó. Ví dụ:
button1_Click(...)
{
_DataCollections.ElementAt(count).Status = "Active";
myListView.Items.Refresh();
ExecuteLongOperation();
_DataCollections.ElementAt(count).Status = "Finished";
myListView.Items.Refresh();
}
Tình trạng sẽ không bao giờ goto "Active", nó sẽ đi thẳng vào "Xong" sau khi phương pháp này hoàn tất. Tôi cũng đã thử sử dụng một điều phối viên như sau:
button1_Click(...)
{
this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background,
(NoArgDelegate)delegate { _DataCollection.ElementAt(count).Status = "Active"; myListView.Items.Refresh(); });
ExecuteLongOperation();
this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background,
(NoArgDelegate)delegate { _DataCollection.ElementAt(count).Status = "Finished"; myListView.Items.Refresh(); });
}
Tuy nhiên, điều đó dường như không hoạt động chính xác. Bất kỳ lời khuyên hoặc ý tưởng sẽ được đánh giá cao.
tôi cần thời gian dài để tìm cách triển khai chính xác phương thức Affecting_PropertyChanged .. bạn chỉ cần một dòng: 'MyBase.OnCollectionChanged (NotifyCollectionChangedEventArgs (NotifyCollectionChangedAction.Reset))' và tôi khuyên bạn nên ghi đè InsertItem và RemoveItem của ObservableCollection, vì SetItem đã làm 't làm việc cho tôi. –
@Felix, vâng, đã có nhiều hơn nữa. Việc thực hiện lớp học là hơn 800 dòng. Tôi đã nói rằng tôi đã đăng một phần mã, chủ yếu là để cung cấp cho các ý tưởng chung. –
Tôi đã viết thư này cho những người khác tìm thấy bài đăng này và không biết cách triển khai các dòng mã này. Nó không phải là một sự điều chỉnh, chỉ là một phần mở rộng để làm việc này. :) nhưng tại sao lớp của bạn có độ dài 800 dòng? Tôi thực sự thích thú khi thấy việc thực hiện lớp học của bạn. –