【发布时间】:2010-12-10 15:23:18
【问题描述】:
您能想到IEditableObject 在基于 MVVM 的 WPF 应用程序中仍然有用的场景吗?如果是这样,你有一个例子来证明这一点。
【问题讨论】:
标签: wpf mvvm ieditableobject
您能想到IEditableObject 在基于 MVVM 的 WPF 应用程序中仍然有用的场景吗?如果是这样,你有一个例子来证明这一点。
【问题讨论】:
标签: wpf mvvm ieditableobject
我在我的一个应用程序中使用了IEditableObject。例如,如果您有一个用于编辑内容的对话框,您可以在 ViewModel 上实现 IEditableObject。当对话框打开时您调用BeginEdit(),当用户单击确定时调用EndEdit(),当用户单击取消时调用CancelEdit()。
IEditableObject 是一个很好的界面,您可以随时回滚更改。
【讨论】:
IEditableObject、包含网格的视图、网格绑定到的 ViewModel 或 ViewModel 包含的集合的类?
我在我的应用程序中实现了IEditableObject,这样如果用户输入的内容无效,我可以避免更新我的数据模型,如果用户放弃更改,我可以回滚到原始值。
【讨论】:
在DataGrid 中显示的类型内。这是需要的,因为当我使用选项卡并且DataGrid 存储在该选项卡中时,切换了强制提交所需的选项卡,因此如果单元格处于活动状态,可以在DataGrid 中发言;回滚更改,因为它们没有提交。 T
DataGrid 应用了一种行为来实现此功能,但 IEditableObject 部分在下方。
private IDatabaseConnection _copy;
void IEditableObject.BeginEdit()
{
if (this._copy == null)
this._copy = _container.Resolve<IDatabaseConnection>();
_copy.Database = this.Database;
_copy.DisplayName = this.DisplayName;
_copy.HostName = this.HostName;
_copy.Username = this.Username;
_copy.Password = this.Password;
}
void IEditableObject.CancelEdit()
{
this.Database = _copy.Database;
this.DisplayName = _copy.DisplayName;
this.HostName = _copy.HostName;
this.Username = _copy.Username;
this.Password = _copy.Password;
}
void IEditableObject.EndEdit()
{
_copy.Database = String.Empty;
_copy.DisplayName = String.Empty;
_copy.HostName = String.Empty;
_copy.Username = String.Empty;
_copy.Password = String.Empty;
}
【讨论】: