首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# mvvm如何处理关闭窗口事件

C# mvvm如何处理关闭窗口事件
EN

Stack Overflow用户
提问于 2022-04-14 15:08:09
回答 1查看 89关注 0票数 -1

我正在开发一个wpf mvvm应用程序与笔记。面对这样一个事实,我无法在viewModel中处理窗口关闭事件。我发现了类似的问题,但答案使用Mvvm,这是我想要避免的。我可以这样处理:

FindNoteWindow.xaml

代码语言:javascript
运行
复制
<Window x:Class="NotesARK6.View.FindNoteWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    DataContext="{Binding Path=FindNoteWindowViewModel, Source={StaticResource ViewModelLocator}}"
    mc:Ignorable="d"
    Closing="Window_Closing"
    Title="FindNoteWindow" Height="250" Width="400">

FindNoteWindow.xaml.cs

代码语言:javascript
运行
复制
public partial class FindNoteWindow : Window
{
    public FindNoteWindow()
    {
        InitializeComponent();
    }

    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        // code
    }
}

但这不是我需要的。我想像这样处理viewModel中的关闭事件:

FindNoteWindow.xaml

代码语言:javascript
运行
复制
<Window x:Class="NotesARK6.View.FindNoteWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    DataContext="{Binding Path=FindNoteWindowViewModel, Source={StaticResource ViewModelLocator}}"
    mc:Ignorable="d"
    Closing="{Binding Window_Closing}"
    Title="FindNoteWindow" Height="250" Width="400">

FindNoteWindowViewModel.cs

代码语言:javascript
运行
复制
    public void Window_Closing(object sender, CancelEventArgs e)
    {
        //code
    }

但是如果我这样做,就会得到错误: InvalidCastException:未能将对象类型'System.Reflection.RuntimeEventInfo‘转换为'System.Reflection.MethodInfo’。谢谢您的答复。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-15 08:09:32

可以将命令绑定到以下事件:

代码语言:javascript
运行
复制
   <i:Interaction.Triggers>
        <i:EventTrigger EventName="Closing" >
            <i:InvokeCommandAction Command="{Binding WindowClosingCommand}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>

请记住添加对System.Windows.Interactivity的引用:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

从示例和更多细节中查看https://blog.magnusmontin.net/2013/06/30/handling-events-in-an-mvvm-wpf-application/

编辑:或者调用CallMethodAction而不是InvokeCommandAction,同样的例子在链接中。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71873796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档