我正在開發一個帶有注釋的 wpf mvvm 應用程式。面對我無法在 viewModel 中處理視窗關閉事件的事實。我發現了類似的問題,但我想避免使用 Mvvm Light 的答案。我可以這樣處理:
FindNoteWindow.xaml
<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
public partial class FindNoteWindow : Window
{
public FindNoteWindow()
{
InitializeComponent();
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// code
}
}
但這不是我需要的。我想像這樣處理 viewModel 中的關閉事件:
FindNoteWindow.xaml
<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
public void Window_Closing(object sender, CancelEventArgs e)
{
//code
}
但如果我這樣做,我會收到錯誤:InvalidCastException:無法將物件型別“System.Reflection.RuntimeEventInfo”轉換為型別“System.Reflection.MethodInfo”。提前感謝您的回復。
uj5u.com熱心網友回復:
您可以將命令系結到這樣的事件:
<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,再次示例在鏈接中
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/458848.html
