【WPF高仿 Windows记事本】开发日记 (二) 初步使用MVVM模式设计 帮助菜单 的三个命令

在这里插入图片描述

前言

作者:浪子花梦,一个有趣的程序员 ~
在上一文中,我们给帮助菜单设置了点击事件,事件处理器在隐藏代码中,生成程序时,他们会编译在一起,这就造成了紧耦合性非常大,今天我们将 使用MVVM模式来解除耦合性,使用命令系统来替换点击事件 . . .

前文如下所示:
【WPF高仿 Windows记事本】开发日记 (一) UI布局与 帮助菜单 功能实现


1)自定义命令类:
使用别人写好的轮子,直接调用即可,我们创建一个文件夹 Helpers,其中有三个类,这三个类就是我在网上下载的别人写好的类,使用这些类,我们就可以直接定义命令了,使用非常方便,如下所示:
在这里插入图片描述
代码在下面的链接之中已经说明,需要的可以直接 Copy一下:
WPF使用成熟的命令系统

3)创建存放Win32API的类,如下所示:
在这里插入图片描述
我们在上文中用到了一个api 是ShellAbout,我们在此类中定义如下所示:
在这里插入图片描述
方法和类都是静态的,需要的话我们直接调用即可 . . .
.
.

2)构建MVVM设计模式,创建 ViewModels 文件夹,存放主窗口与帮助菜单的业务逻辑:
在这里插入图片描述
2.1)设计HelpViewModel 帮助菜单业务逻辑类,代码如下所示,其中包括了命令定义,命令的创建:

class HelpViewModel
{
    // 创建三个命令,对应帮助菜单中的三个子菜单
    public RelayCommand HelpCommand { get; }
    public RelayCommand FeedBackCommand { get; }
    public RelayCommand AboutCommand { get; }

    public HelpViewModel()
    {
        HelpCommand = new RelayCommand(OnHelpCommand);
        FeedBackCommand = new RelayCommand(OnFeedBackCommand);
        AboutCommand = new RelayCommand(OnAboutCommand);
    }


    private void OnHelpCommand()
    {
        // 打开帮助网页
        Process.Start("https://go.microsoft.com/fwlink/?LinkId=834783");
    }

    private void OnFeedBackCommand()
    {
        // 打开反馈中心
        Process.Start("feedback-hub://?appid=5201314");
    }

    private void OnAboutCommand()
    {
        // 利用反射获取当前程序集的控制权
        Assembly assembly = Assembly.GetExecutingAssembly();
        // 获取当前程序集的标题名称
        var title = assembly.GetCustomAttribute(typeof(AssemblyTitleAttribute)) as AssemblyTitleAttribute;
        // 获取当前程序集的版本号
        var version = assembly.GetCustomAttribute(typeof(AssemblyFileVersionAttribute)) as AssemblyFileVersionAttribute;

        // 获取资源中的图标以流的方式保存
        StreamResourceInfo streamResourceInfo = Application.GetResourceStream(new Uri("Notepad_WPF.ico", UriKind.Relative));
        Icon icon = new Icon(streamResourceInfo.Stream);        // 获取流中的图标

        // 显示关于框(Win32API)
        Win32Helper.ShellAbout(Process.GetCurrentProcess().MainWindowHandle, title.Title, version.Version, icon.Handle);
    }
}

当命令触发时,这些方法将被调用,与上一文中有点类似 . . .

2.2)设计主窗口业务逻辑 MainViewModels类,其中定义了帮助菜单的业务逻辑类:

// 主窗口的业务逻辑类
class MainViewModels
{
    // 帮助菜单的业务逻辑(命令等)
    public HelpViewModel HelpViewModel { get; }

    public MainViewModels()
    {
        HelpViewModel = new HelpViewModel();
    }
}

.
.

3)在XAML 代码中引用主窗口业务逻辑类,在数据上下文中引用:
在这里插入图片描述
.
.
4)给帮助菜单绑定命令:
在这里插入图片描述
其中数据上下文(HelpViewModel)表示的是主窗口业务逻辑类(MainViewModels)的一个属性 . . .

.
.

5)完整的文件目录如下所示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42100963/article/details/107533778