对话框的MVVM实现

如果你决定让你的应用程序应用MVVM模式的话,那么对话框的MVVM实现就会成为你要考虑的众多问题中的一个,因为基本上每一个应用程序都会有对话框,你的应用程序可能也不例外。

在用MVVM实现对话框的时候,我们主要会遇到两大问题:

1. ViewModel怎么关闭对话框,或者说怎么处理对话框的一些事件。

2. ViewModel中弹出对话框应该怎么处理 -- 弹出对话框会使UnitTest失败。

 

第一个问题: ViewModel怎么关闭对话框

假如你实现的对话框中有一个“确定”按钮,并且在ViewModel中有一个对应的命令绑定到这个按钮中,在这个按钮的命令处理函数中你需要关闭这个对话框。由于ViewModel并不知道对话框的存在,所以在ViewModel中是做不到直接关闭对话框的操作的。既然不能直接关闭,那就只能使用间接的方式来关闭对话框。下面介绍其中的一种方式:

定义一个接口:

public interface IDialogRequest

{

      event EventHandler RequestClose;

}

让ViewModel实现这个接口,当需要关闭对话框的时候就触发这个事件。

 

那么谁来注册这个事件,以及在哪里注册?

你可能会直接在对话框的类中写这样的代码来注册RequestClose事件:

IDialogRequest dialogRequest = DataContext as IDialogRequest;

if(dialogRequest != null)

{

    dialogRequest.RequestC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里我可以给你一个WPF使用MvvmLight实现MVVM的工程实例。 首先,你需要在Visual Studio中安装MvvmLight框架。可以通过NuGet来安装MvvmLight库,具体步骤如下: 1. 在Visual Studio中打开你的WPF工程。 2. 在Solution Explorer窗口中右键单击工程,选择“Manage NuGet Packages”。 3. 在“NuGet Package Manager”窗口中,在搜索框中输入“MvvmLight”,选择“MvvmLight”并安装。 接下来,我们就可以开始实现MVVM模式了。 1. 创建一个新的ViewModel类,继承自ViewModelBase类。 ```csharp using GalaSoft.MvvmLight; public class MainViewModel : ViewModelBase { //ViewModel的属性和命令 } ``` 2. 在ViewModel中实现需要绑定的属性和命令。 ```csharp private string _message; public string Message { get { return _message; } set { if (_message != value) { _message = value; RaisePropertyChanged(() => Message); } } } private RelayCommand _showMessageCommand; public RelayCommand ShowMessageCommand { get { if (_showMessageCommand == null) { _showMessageCommand = new RelayCommand(() => { MessageBox.Show(Message); }); } return _showMessageCommand; } } ``` 3. 在View中绑定ViewModel的属性和命令。 ```xaml <Window x:Class="WpfApp1.MainWindow" 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" xmlns:local="clr-namespace:WpfApp1" xmlns:vm="clr-namespace:WpfApp1.ViewModel" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Window.DataContext> <vm:MainViewModel /> </Window.DataContext> <Grid> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <TextBox Text="{Binding Message, UpdateSourceTrigger=PropertyChanged}" /> <Button Grid.Row="1" Content="Show Message" Command="{Binding ShowMessageCommand}" /> </Grid> </Window> ``` 在这个例子中,我们创建了一个MainViewModel类,其中包含了一个Message属性和一个ShowMessageCommand命令。在View中,我们使用DataContext将ViewModel实例与View绑定,并使用Binding将ViewModel的属性和命令绑定到View上。 这样,我们就成功地使用MvvmLight实现MVVM模式。当用户在TextBox中输入文字并点击Button时,将会弹出一个对话框显示用户输入的文字。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值