相关疑难解决方法(0)

如何在C#4中实现Memento模式?

备忘录模式本身似乎相当直截了当.我正在考虑实现与维基百科示例相同的功能,但在此之前我是否有C#的任何语言功能,以便更容易实现或使用?

c# design-patterns memento

16
推荐指数
1
解决办法
1万
查看次数

如何停止更新绑定属性?

我的应用程序中有一个对话框,弹出主屏幕(实际上是按照Billy Hollis的应用程序演示在页面上显示的用户控件),该对话框包含要编辑的主屏幕中的数据.主屏幕是只读的.

我遇到的问题是,当我更改对话框中的数据时,主屏幕上的数据也会更新.显然它们绑定到同一个对象,但有没有办法停止绑定更新,直到我在对话框中单击保存?

wpf binding

9
推荐指数
1
解决办法
5761
查看次数

MVVM关闭文件的方式有可能取消出来

我正在使用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

c# wpf mvvm avalondock caliburn.micro

5
推荐指数
1
解决办法
1795
查看次数

标签 统计

c# ×2

wpf ×2

avalondock ×1

binding ×1

caliburn.micro ×1

design-patterns ×1

memento ×1

mvvm ×1