将卸载的事件绑定到命令-WPF

时间:2019-02-27 10:36:08

标签: c# wpf events binding command

我目前正在研究基于MVVM的WPF应用程序。

我这样定义了一个UserControl:

        <UserControl x:Class="TestMockUp.Views.DriveStartupViews.VehicleIdentificationViewModel"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
                 xmlns:ViewModels="clr-namespace:TestMockUp.ViewModels.DriveStartupViewModels"
                 mc:Ignorable="d" 
                 d:DesignHeight="450" d:DesignWidth="800" d:DataContext="{d:DesignInstance ViewModels:VehicleIdentificationViewModel}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Unloaded">
                <i:InvokeCommandAction Command="{Binding PageUnloaded}"/>
            </i:EventTrigger>
            <i:EventTrigger EventName="Loaded">
                <i:InvokeCommandAction Command="{Binding PageLoaded}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
         ...
    </UserControl>

我想做的是,将命令挂接到UserControl的Unloaded-Event。我对窗口或应用程序是否关闭不感兴趣。

我将带有DataTemplate的UserControl按需加载到窗口中。如果控件已卸载,我需要注册。我可以将其绑定到xaml.cs文件中的事件处理程序,但是我需要在ViewModel中调用Command。

已加载事件的触发器正在触发,但未加载事件的触发器正在触发。我的猜测是,<i:Interaction.Triggers>在事件触发之前已经被卸载,因此无法进行注册。

我发现了有关AttachedBehaviour的一些信息,但无法使其在Unloaded下工作。

有人知道在没有任何Nuget-Package或ThirdParty软件的情况下实现这一目标的方法吗?

编辑:已加载的命令被触发,而未加载的触发了视图内的event_handler(如果我声明了它),但是没有触发<i:Interaction.Triggers>的命令

0 个答案:

没有答案