该备忘录模式本身似乎相当直截了当.我正在考虑实现与维基百科示例相同的功能,但在此之前我是否有C#的任何语言功能,以便更容易实现或使用?
我的应用程序中有一个对话框,弹出主屏幕(实际上是按照Billy Hollis的应用程序演示在页面上显示的用户控件),该对话框包含要编辑的主屏幕中的数据.主屏幕是只读的.
我遇到的问题是,当我更改对话框中的数据时,主屏幕上的数据也会更新.显然它们绑定到同一个对象,但有没有办法停止绑定更新,直到我在对话框中单击保存?
我正在使用Avalondock 2.x作为我的一个开源项目,如果你关闭它时文档很脏,你应该可以取消关闭.
我正在使用Caliburn Micro和Coroutine,只有我能够解决它的方法是使用CM附加到事件
<i:EventTrigger EventName="DocumentClosing">
<cal:ActionMessage MethodName="DocumentClosing">
<cal:Parameter Value="$documentcontext" />
<cal:Parameter Value="$eventArgs" />
</cal:ActionMessage>
</i:EventTrigger>
Run Code Online (Sandbox Code Playgroud)
事件arg有取消属性.这个approuch的问题是它不是很MVVM友好,我已经创建了一个小帮手方法来Coroutinify这个像
public IEnumerable<IResult> Coroutinify(IEnumerable<IResult> results, System.Action cancelCallback)
{
return results.Select(r =>
{
if (r is CancelResult)
cancelCallback();
return r;
});
}
Run Code Online (Sandbox Code Playgroud)
用过像
public IEnumerable<IResult> DocumentClosing(ScriptEditorViewModel document, DocumentClosingEventArgs e)
{
return Result.Coroutinify(HandleScriptClosing(document), () => e.Cancel = true);
}
Run Code Online (Sandbox Code Playgroud)
这有效,但它有点笨拙等,是否有更多MVVM方式关闭Avalondock文件取消能力?
编辑:源代码
https://github.com/AndersMalmgren/FreePIE/blob/master/FreePIE.GUI/Shells/MainShellView.xaml#L29
https://github.com/AndersMalmgren/FreePIE/blob/master/FreePIE.GUI/Shells/MainShellViewModel.cs#L110
https://github.com/AndersMalmgren/FreePIE/blob/master/FreePIE.GUI/Result/ResultFactory.cs#L49