我目前正在研究基于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>
的命令