WPF MVVM模式下关闭窗体

本文介绍了在WPF MVVM模式下如何关闭窗体的两种方法。第一种方法是在View层通过给窗体命名并绑定命令来关闭;第二种方法则是通过在ViewModel层使用Behavior,借助System.Windows.Interactivity库,定义关闭行为并绑定属性来实现关闭功能。详细步骤包括定义行为类、设置ViewModel属性、前端界面绑定等。
摘要由CSDN通过智能技术生成

WPF MVVM模式下关闭窗体

需求一:在View层关闭窗体:
一、首先给窗体起个名字,name=“window”;

name="window"

二、给按钮控件绑定命令,并把窗体名字作为参数;

<Button Command={Binding CloseWindowCommand} CommandParameter={Binding ElementName=window}/>

三、在ViewModel层按钮的绑定命令函数中处理关闭功能:(obj为View层传递的参数,即窗体名称)

this.CloseWindowCommand.DoExecute = new Action<object>((o) =>
            {
                (o as Window).Close();
            });

需求二:在ViewModel层通过属性关闭窗体:
关闭窗口的方法:借助System.Windows.Interacivity里面的Behavior,把“LoginViewModel.cs”里面的属性,关联到LoginView.xaml层的一个事件(Window.Close())
一、在“Common”文件夹,新建“WindowManagerBehavior.cs”类,定义关闭行为

public class WindowBehavior : Behavior<Window>
    {
        /// <summary>
        /// 关闭窗口
        /// </summary>
        public bool Close
        {
            get { return (bool)GetValue(CloseProperty); }
            set { SetValue(CloseProperty, value); }
        }
        public static readonly DependencyProperty CloseProperty =
            DependencyProperty.Register("Close", typeof(bool), typeof(WindowBehavior), new PropertyMetadata(false, OnCloseChanged));
        private static void OnCloseChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var window = ((WindowBehavior)d).AssociatedObject;
            var newValue = (bool)e.NewValue;
            if (newValue)
            {
                window.Close();
            }
        }

    }

二、在ViewModel.cs里面的定义ToClose属性:

private bool isClose;
        public bool IsClose
        {
            get { return isClose; }
            set
            {
                isClose = value; this.DoNotify();
                //if (isClose)
                //{
                //    this.DoNotify();
                //}
            }
        }

三、引用System.Windows.Interactivity.dll。安装“管理NuGet程序包”下载,并在界面中引用。

xmlns:i ="http://schemas.microsoft.com/expression/2010/interactivity"

四、在前端View.xaml进行绑定

<i:Interaction.Behaviors>
        <common:WindowBehavior Close="{Binding IsClose}"/>
    </i:Interaction.Behaviors>

在这里插入图片描述
五、最后可以通过绑定命令或者在其他函数中给IsClose属性赋值true即可关闭窗体。

IsClose = true;//关闭窗体
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WPF MVVM模式下,窗口的ShowDialog实现是通过使用自定义的对话框服务来实现的。 首先,我们需要创建一个实现了IDialogService接口的自定义对话框服务类,该接口定义了ShowDialog方法。例如: ``` public interface IDialogService { bool? ShowDialog(object viewModel); } ``` 然后,在实际的对话框服务类中,我们可以使用WPF的Window或者其他自定义的Window来实现ShowDialog方法。在ShowDialog方法内部,我们可以根据传入的ViewModel来创建对应的视图,并将ViewModel与视图进行关联。例如: ``` public class DialogService : IDialogService { public bool? ShowDialog(object viewModel) { var dialogWindow = new DialogWindow(); dialogWindow.DataContext = viewModel; return dialogWindow.ShowDialog(); } } ``` 在ViewModel中,我们需要使用对话框服务来调用ShowDialog方法,并将当前的视图模型作为参数传入。在调用ShowDialog方法后,可以根据返回值来判断对话框是通过"确定"按钮还是"取消"按钮关闭的。例如: ``` public class MainViewModel { private readonly IDialogService _dialogService; public MainViewModel(IDialogService dialogService) { _dialogService = dialogService; } public void OpenDialog() { var dialogViewModel = new DialogViewModel(); var result = _dialogService.ShowDialog(dialogViewModel); if (result == true) { // 确定按钮被点击 } else if (result == false) { // 取消按钮被点击 } } } ``` 最后,在使用MVVM模式的主视图或者其他视图中,我们可以通过依赖注入或者其他方式来创建对话框服务的实例,并将其作为参数传入ViewModel的构造函数中,以便于在ViewModel中调用ShowDialog方法来展示对话框。例如: ``` public partial class MainWindow : Window { private readonly MainViewModel _viewModel; public MainWindow() { InitializeComponent(); var dialogService = new DialogService(); _viewModel = new MainViewModel(dialogService); DataContext = _viewModel; } private void OpenDialogButton_Click(object sender, RoutedEventArgs e) { _viewModel.OpenDialog(); } } ``` 通过以上步骤,我们就可以实现在WPF MVVM模式窗口ShowDialog的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值