Cách mà chúng tôi xử lý yêu cầu nhiều công việc hơn một chút, nhưng nó có thể được tự động bằng cách sử dụng các macro VS hoặc các công cụ mã-gen như CodeSmith. Tuy nhiên, cách tiếp cận này có thể mở rộng đối với bất kỳ cấu trúc giao diện người dùng nào mà bộ sưu tập bị ràng buộc và không phải được triển khai lại trong giao diện người dùng mỗi khi bạn cần biết có thay đổi hay không.
Khái niệm này là cập nhật cờ trong bộ sưu tập và đối tượng kinh doanh để xác định liệu thành viên bộ sưu tập đã thay đổi hay bất kỳ bản ghi nào đã thay đổi trong bộ sưu tập.
Việc triển khai khá đơn giản:
Thêm thuộc tính HasChanged vào lớp đối tượng nghiệp vụ.
Thêm thuộc tính AnyDeleted vào bộ sưu tập. Điều này sẽ chỉ được đặt nếu các mục bị xóa khỏi bộ sưu tập.
Khởi tạo các giá trị này thành sai sau khi các bản ghi được đọc từ DB.
(Bây giờ phần bán tẻ nhạt) Đối với mỗi thuộc tính trong lớp, đặt thuộc tính HasChanged thành true nếu giá trị thực sự thay đổi. Hãy cẩn thận với các giá trị null. Ví dụ:
public bool IsSelected
{
get
{
return m_fIsSelected;
}
set
{
if (m_fIsSelected != value)
{
this.HasChanged = true;
m_fIsSelected = value;
}
}
}
Sửa đổi các bộ sưu tập để thiết lập thuộc tính AnyDeleted để đúng khi kỷ lục này sẽ bị xóa:
protected override void RemoveItem(int index)
{
this.AnyDeleted = true;
base.RemoveItem(index);
}
Cuối cùng, thêm một phương pháp để các bộ sưu tập để cho biết hay không bất cứ điều gì đã thay đổi. Đây là phương thức mà bạn sẽ gọi để xác định xem có cần lưu bất kỳ thay đổi nào hay không:
public bool HasAnyChanges()
{
// Exceptions are handled by the caller
// If anything was deleted, return true
if (this.AnyDeleted)
{
return true;
}
else
{
foreach (T theItem in this)
{
if (theItem.HasAnyChanges())
{
return true;
}
}
}
return false;
}
Nguồn
2012-01-01 01:10:59
Không có hai bản xem trước thực tế, chỉ một. – mattsven
câu hỏi của bạn cho biết hai phiên bản danh sách xem! Vì vậy, ý của bạn là gì? Bạn đã một lần nữa đề cập đến việc so sánh hai! – King
Bạn đang ràng buộc một listview vào một số cấu trúc dữ liệu như xml hoặc có nó như là chuỗi và sau đó lưu nó trong cài đặt? Có phải vậy không? @NeXXeuS Nếu tôi hiểu câu hỏi của bạn là như thế này. Sau đó, trừ khi ứng dụng có các thiết lập trong bộ nhớ và liên tục cập nhật nó, bạn sẽ phải đọc các thiết lập và thực hiện nó. Của nó nhiều như tiết kiệm nó. Tôi không nghĩ rằng nó sẽ tạo ra sự khác biệt về hiệu suất nếu nó là như vậy. – King