WPF中通过MVVM模式来关闭View

一,场景

    通过单击按钮执行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 }
View Code

     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     }
View Code


     (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>
View Code

       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     }
View Code

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

 

 

 

你可能感兴趣的:(view)