我正在使用WPF和MVVM Light框架(我是新用的)。
我想做以下事情:
到目前为止,我有这个:
在MainWindow.xaml.cs中:
public MainWindow()
{
InitializeComponent();
Closing += (s, e) => ViewModelLocator.Cleanup();
}
在ViewModelLocator.cs中:
public static void Cleanup()
{
ServiceLocator.Current.GetInstance<MainViewModel>().Cleanup();
}
在MainViewModel.cs中:
public override void Cleanup()
{
MessageBoxResult result = MessageBox.Show(
"Unsaved data will be lost, would you like to exit?",
"Confirmation",
MessageBoxButton.YesNo,
MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
// clean-up resources and exit
}
else
{
// ????
}
实际上,如果用户回答“是”或“否”,则两种情况下应用程序都将退出。
我不太确定如何从这里开始...
任何帮助都会很棒!
由于
答案 0 :(得分:4)
如果要取消关闭,可以使用EventToCommand
中的EventTrigger
来捕获结束事件,并将传递的Cancel
的{{1}}属性设置为true :
<强> XAML:强>
CancelEventArgs
<强>视图模型:强>
<Window ...
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF45"
DataContext="{Binding Main, Source={StaticResource Locator}}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Closing">
<cmd:EventToCommand Command="{Binding OnClosingCommand}"
PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<Grid>
...
</Grid>
</Window>
答案 1 :(得分:2)
Closing
事件参数具有Cancel
属性,如果用户取消关闭,则需要将其设置为true
。因此,您的Cleanup()
方法应该返回bool
,您应该将其分配给Cancel
属性。