2009-03-10 20 views
5

Nếu tôi có biểu mẫu dữ liệu, làm cách nào để biết liệu người dùng đã sửa đổi hay chưa (bằng cách nhập văn bản vào hộp văn bản hoặc bằng cách chọn một mục trong hộp tổ hợp)? Tôi đã cố gắng hooking vào sự kiện "TextChanged" của hộp văn bản của tôi, nhưng vấn đề là, khi biểu mẫu của tôi tham gia vào dữ liệu, sự kiện "TextChanged" kích hoạt, đánh dấu sớm biểu mẫu của tôi là "bẩn".Làm thế nào tôi có thể đánh dấu một biểu mẫu/trường là "bẩn" nếu nó là dữ liệu?

Trả lời

3

thử thực hiện

public partial class Window1 : INotifyPropertyChanged 

và sau đó

public event PropertyChangedEventHandler PropertyChanged; 

public string UserName 
{ 
    get { return _UserName; } 
    set { if (value != _UserName) 
    { 
     _UserName = value; 
     OnNotifyPropertyChanged("UserName"); 
    }} 
} 

private void OnNotifyPropertyChanged(string property) 
{ 
    if (PropertyChanged != null) 
    PropertyChanged(this, new PropertyChangedEventArgs(property)); 
} 

và DataBind như

<TextBox Text="{Binding UserName}"/> 
+0

Cải thiện rất nhỏ: bạn có thể giảm lồng bằng cách thay thế làm cho nó: if (value == _UserName) trở về; Cắt giảm sự lộn xộn thị giác một chút. –

0

Khi bạn lần đầu tiên hiển thị trang, lưu trữ các giá trị biểu mẫu trong một mảng, khi sự kiện TextChanged kích hoạt, so sánh với những gì bạn đã có, nếu nó là dạng bẩn khác nhau.

1

Lớp mô hình của bạn có triển khai INotifyPropertyChanged không? Nếu có, bạn có thể thêm trình xử lý cho sự kiện PropertyChanged trên lớp và xem tài sản đang được đề cập đến để thay đổi.

Nếu bạn chưa triển khai INotifyPropertyChanged, có thể cơ chế bạn đang sử dụng để thông báo cho lớp giao diện người dùng của bản cập nhật cũng có thể được sử dụng ở đây?

0

->http://www.mishainthecloud.com/2009/07/simple-dirty-tracking-for-winforms-in-c.html.

Tôi biết điều này hơi trễ nhưng tôi thích cách tiếp cận này :) Tốt đẹp được đóng gói.

Sau khi liên kết các điều khiển, hãy gọi SetAsClean(). Cuộc gọi phương thức này có thể được đóng gói trong cùng một lớp theo dõi bẩn bằng cách xử lý một số sự kiện của BindingSources.

+0

Đừng nghĩ rằng điều này áp dụng cho WPF. –

Các vấn đề liên quan