WPF中通过MVVM模式来关闭View

本文介绍了两种在MVVM模式下通过ViewModel关闭窗体的方法:一是利用事件聚合发布订阅关闭事件;二是采用Prism框架的InteractionRequest触发窗体关闭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,场景

    通过单击按钮执行ViewModel中的Command来关闭窗体,项目引用Prism4架构及使用MVVM进行UI层的开发。

二, 实现代码(方式应该有很多种,现介绍两种我所想过的方式)

     (1).通过发布订阅事件来关闭窗体

     1.CodeBahind中的代码

1 public partial class ApproveLoginView : Window
 2
 3 {
 4
 5 [ImportingConstructor]
 6
 7 public ApproveLoginView()
 8
 9 {
10
11 InitializeComponent();
12
13 ServicesHelper.EventAggregator.GetEvent<CloseEvent> ().Subscribe(CloseView);
14
15 }
16
17 private void CloseView(object o)
18
19 {
20
21 if(o == DataContext)
22
23 Close();
24
25 }
26
27 }


  2.ViewModel部分代码

1 public class ApproveLoginViewModel : NotificationObject,
 2 {
 3
 4 private IEventAggregator _eventAggregator;
 5
 6 [ImportingConstructor]
 7 public ApproveLoginViewModel(IEventAggregator eventAggregator)
 8 {
 9 _eventAggregator = eventAggregator;
10 }
11
12 #region Command
13
14 private ICommand _okCommand;
15 public ICommand OkCommand
16 {
17 get
18 {
19 if (_okCommand == null)
20 {
21 _okCommand = new RelayCommand(Ok);
22 }
23 return _okCommand;
24 }
25 private set { }
26 }
27
28
29 private void Ok()
30 {
31 _eventAggregator.GetEvent<CloseEvent>().Publish(this);
32 }
33
34
35 #endregion
36 }


(2).通过Prism的interactionRequest来实现

   1.Window中的Xaml部分代码

1 <Window x:Class="MVVMCloseView.MainWindow"
 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
 5 xmlns:v="http://schemas.microsoft.com/expression/2010/interactions"
 6 xmlns:prism="http://www.codeplex.com/prism"
 7 Title="MainWindow" Height="350" Width="525" x:Name="window">
 8 <i:Interaction.Triggers>
 9 <prism:InteractionRequestTrigger SourceObject="{Binding CloseRequest}">
10 <v:CallMethodAction MethodName="Close" TargetObject="{Binding ElementName=window}"/>
11 </prism:InteractionRequestTrigger>
12 </i:Interaction.Triggers>
13 <Grid>
14 <Button Content="Close" Grid.Row="1" FontSize="30" Width="200" Height="100" Command="{Binding CloseCommand}"/>
15 </Grid>
16 </Window>


2.ViewModel中的部分代码

1 public class MainWindowViewModel : NotificationObject
 2 {
 3 public MainWindowViewModel()
 4 {
 5 this.CloseCommand = new DelegateCommand(new Action(Close));
 6 this.CloseRequest = new InteractionRequest<Notification>();
 7 }
 8
 9 public DelegateCommand CloseCommand { get; set; }
10
11 private void Close()
12 {
13 this.CloseRequest.Raise(new Notification() );
14 }
15
16 public InteractionRequest<Notification> CloseRequest { get; set; }
17 }


 

好了,就说到这了,因为自己在通过ViewModel来关闭view碰到些问题,上网找了些资料后找到这些解决方法的,希望对有需要的朋友能有帮助。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值