gpt4 book ai didi

c# - MVVM App,关闭窗口期间方法的确切顺序是什么

转载 作者:行者123 更新时间:2023-11-30 22:12:35 25 4
gpt4 key购买 nike

我正试图在我的窗口关闭之前在我的 VM 上执行一些操作,这意味着我需要 DataContext 必须对我的操作可用。

实际上我正在尝试:

<i:Interaction.Triggers>
<i:EventTrigger EventName="Closing">
<cmd:EventToCommand Command="{Binding _MyCleanUpCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>

但是,此时我的 ViewModel 上的所有对象都已清理,并且我的 DataContext = null

  1. 用我的命令绑定(bind)事件是什么?

  2. 有一种方法可以强制一个类在不再需要时自动执行一个方法(需要意味着在我当前的过程中)

注意:对于第二个问题,IDisposable 不能正常工作,因为必须手动调用。 ~ Finalizers 不直接工作。

最佳答案

首先,所有对象都没有被清理。

您尝试收听的事件名称称为“Closing”,它在实际关闭之前被触发。向您发出窗口完全关闭信号的事件称为“关闭”。这些是您可以参加的两个事件。

我会简单地在 View 构造函数中关联处理程序

MyWindow() 
{
// Set up ViewModel, assign to DataContext etc.
Closing += viewModel.OnWindowClosing;
}

然后将处理程序添加到 ViewModel:

public void OnWindowClosing(object sender, CancelEventArgs e) 
{
// Handle closing logic, set e.Cancel as needed
}

在您的情况下,通过使用具有更多间接性的更精细的模式(额外的 5 行 XML 加上命令模式),除了复杂性之外,您什么也得不到。

“零代码隐藏”本身并不是目标,重点是将 ViewModel 与 View 分离。即使事件绑定(bind)在 View 的代码隐藏中,ViewModel 也不依赖于 View,并且可以对关闭逻辑进行单元测试。

但是,如果您坚持坚持互动,我建议您阅读以下链接:

http://msdn.microsoft.com/en-us/library/ms748948.aspx

它将为您提供有关 Window 事件的概述。

顺便说一句,正如我已经说过的,DataContext 肯定存在,所以我假设您宁愿在命令模式中的某处存在错误(您可能错误地定义了命令)。您应该已经向我们发布了完整的代码。

此外,使用第一个字母为下划线的公共(public)命令命名已经过时了。我记得 20 年前在纯 C 中使用它们来表示私有(private)字段。 :)

关于c# - MVVM App,关闭窗口期间方法的确切顺序是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19624184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com