Điều cần ghi nhớ về INotifyPropertyChanging
là bạn không thể dừng lại thay đổi xảy ra. Điều này chỉ cho phép bạn ghi lại rằng sự thay đổi đã xảy ra.
Tôi sử dụng nó trong khuôn khổ của tôi để theo dõi thay đổi, nhưng nó không phải là một phương pháp thích hợp để tạm dừng thay đổi.
Bạn có thể mở rộng ViewModelBase
của bạn với một cặp giao diện tùy chỉnh/sự kiện:
delegate void AcceptPendingChangeHandler(
object sender,
AcceptPendingChangeEventArgs e);
interface IAcceptPendingChange
{
AcceptPendingChangeHandler PendingChange;
}
class AcceptPendingChangeEventArgs : EventArgs
{
public string PropertyName { get; private set; }
public object NewValue { get; private set; }
public bool CancelPendingChange { get; set; }
// flesh this puppy out
}
class ViewModelBase : IAcceptPendingChange, ...
{
protected virtual bool RaiseAcceptPendingChange(
string propertyName,
object newValue)
{
var e = new AcceptPendingChangeEventArgs(propertyName, newValue)
var handler = this.PendingChange;
if (null != handler)
{
handler(this, e);
}
return !e.CancelPendingChange;
}
}
Tại thời điểm này, bạn sẽ cần phải thêm nó theo quy ước để xem các mô hình của bạn:
class SomeViewModel : ViewModelBase
{
public string Foo
{
get { return this.foo; }
set
{
if (this.RaiseAcceptPendingChange("Foo", value))
{
this.RaiseNotifyPropertyChanging("Foo");
this.foo = value;
this.RaiseNotifyPropretyChanged("Foo");
}
}
}
}
Bạn muốn đạt được điều gì ở đây? Trường hợp sử dụng để biết khi nào một tài sản là * về * để thay đổi? – ChrisF
Để xác minh người dùng "Bạn có chắc chắn không?" cho những thay đổi nhất định ... Chúng tôi muốn đảm bảo quản trị viên có nghĩa là thay đổi tên người dùng/thông tin đăng nhập của người dùng và họ không vô tình cập nhật trường. – michael