首页 > 其他分享 >VS插件开发实现简单的 ViewModel 和 View 之间的切换

VS插件开发实现简单的 ViewModel 和 View 之间的切换

时间:2024-06-17 12:53:55浏览次数:12  
标签:插件 string ViewModel var VS result cs View relPath

VS 插件开发实现简单的 ViewModel 和 View 之间的切换

1. 前言

我们在前面一篇中有介绍如何打开文件,如果和 ViewModel 与 View 的切换这个场景结合,那么我们也完全有能力写出一段代码来解决。

2. 代码目标

进行 *ViewModel.cs 和 *View.xaml 之间的切换。

3. 可以预见的缺陷

我们仅仅按照文件名进行区分,必不可少地会出现无法对应的问题,整个的项目的结构需要非常死板的遵循。

4. VCmd 代码

标题:MVVM 切换


using EnvDTE;
using System;
using System.Collections;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows.Forms;

public class C : VisualCommanderExt.ICommand
{

        static string[] _viewEndNameArray = new string[] { "View.xaml", "View.axaml", "UserControl.xaml", "UserControl.axaml", "Page.xaml", "Page.axaml" };
        static string[] _viewCsEndNameArray = new string[] {"View.xaml.cs", "View.axaml.cs", "UserControl.xaml.cs", "UserControl.axaml.cs", "Page.xaml.cs", "Page.axaml.cs" };
        static string[] _viewNameArray = new string[] { "UserControl", "Page", "View" };
        static string[] _viewEndExtensionArray = new string[] { ".xaml", ".axaml" };

 public enum FileType
 {
            Unknown, View, ViewModel, ViewCS,
 }

	public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
	{
   var projectItem = DTE.ActiveDocument.ProjectItem;

  var projectPath = projectItem.ContainingProject.FullName;
  var projectDir = Path.GetDirectoryName(projectPath);

  var itemPath = projectItem.FileNames[0];

  var relPath = itemPath.Substring(projectDir.Length);

  var fileType = GetFileType(relPath);
  var convertPath = GetConvertFilePath(fileType, relPath, projectDir);

  if (string.IsNullOrWhiteSpace(relPath)) return;

  var fullPath = projectDir + convertPath;

  if (File.Exists(fullPath))
  {
      DTE.Documents.Open(fullPath);
  }
	}
    static FileType GetFileType(string relPath)
   {
       if (_viewEndNameArray.Any(i => relPath.EndsWith(i, StringComparison.OrdinalIgnoreCase))) return FileType.View;
       if (_viewCsEndNameArray.Any(i => relPath.EndsWith(i, StringComparison.OrdinalIgnoreCase))) return FileType.ViewCS;
       if (relPath.EndsWith("ViewModel.cs", StringComparison.OrdinalIgnoreCase)) return FileType.ViewModel;

       return FileType.Unknown;
   }

   static string GetConvertFilePath(FileType fileType, string relPath, string projectDir)
   {
       var result = string.Empty;
       switch (fileType)
       {
           case FileType.View:
               result = relPath;
               foreach (var item in _viewNameArray)
               {
                   result = result.Replace(item, "ViewModel");
               }
               result = result.Replace(".xaml", ".cs").Replace(".axaml", ".cs");
               break;
           case FileType.ViewModel:
               result = relPath;

               foreach (var viewName in _viewNameArray)
               {

                   result = string.Empty;
                   foreach (var ext in _viewEndExtensionArray)
                   {
                       result = relPath.Replace("ViewModel", viewName).Replace(".cs", ext);
                       var fullPath = projectDir + result;
                       if (File.Exists(fullPath)) break;

                       result = string.Empty;
                   }

                   if (string.IsNullOrWhiteSpace(result) == false) break;
               }
               break;
           case FileType.ViewCS:
               result = relPath;
               foreach (var item in _viewNameArray)
               {
                   result = result.Replace(item, "ViewModel");
               }
               result = result.Replace(".xaml.cs", ".cs").Replace(".axaml.cs", ".cs");
               break;
           default:
               break;
       }

       return result;
   }

}

标签:插件,string,ViewModel,var,VS,result,cs,View,relPath
From: https://www.cnblogs.com/fanbal/p/18252167

相关文章

  • VSCode使用svn代码管理工具,初次检出失败
    打开vscode,若要使用SVN需要下载相应的插件。 2.安装之后,需要对SVN插件进行配置,配置本地SVN的命令行执行文件地址。点击左下角齿轮,选择“设置Settings”。"svn.path":"C:/ProgramFiles/TortoiseSVN/bin/svn.exe"3.如图所示。设置完毕后重启VSCODE。4.按ctrl+shift......
  • VScode 运行C++
    第一部分下载Vscode请自行百度。第二部分下载Dev-C++请自行百度。第三部分找到编译器路径打开以下路径就行:...\Dev-Cpp\MinGW64\bin,并复制。第四部分配置按下Win+R,再输入sysdm.cpl。弹出这个页面。然后按照下面的步骤。接着,双击最下面的空白,把刚刚的路径复制......
  • 04-jQuery工具函数及 jQuery 插件
    1.jQuery工具函数在jQuery中,工具函数是指直接依附于jQuery对象,针对jQuery对象本身定义的方法,即全局性的,我们统称为工具函数,或Utilites函数。主要作用于:字符串、数组、对象。调用格式:$.函数名()或jQuery.函数名()1.1$.get()通过远程HTTPGET请求载入信息。jQue......
  • LVS+Keepalived群集
    目录一、群集1.一个合格的群集应该具备的特点2.健康检查(探针)常用的工作方式二、Keepalived工具1.概念2.工作原理3.安装与启动4.Keepalived体系主要模块及其作用三、配置主备服务器1.配置主备服务器2.验证3.总结4keepalived的抢占与非抢占模式四、配置LVS+Keepal......
  • Android Studio 插件分享——Gradle Utilities
    插件地址GradleUtilities这个插件可以用来管理Gradle相关的文件,同时用来升级Gradle这个插件提供了一些有用的实用程序来支持Gradle的日常工作:列出所有正在运行的Gradle守护进程及其状态。此外,还可以执行终止守护程序或查看其命令行的操作。管理Gradle主页:清除......
  • Android Studio 插件分享——Gradle Utilities
    插件地址GradleUtilities这个插件可以用来管理Gradle相关的文件,同时用来升级Gradle这个插件提供了一些有用的实用程序来支持Gradle的日常工作:列出所有正在运行的Gradle守护进程及其状态。此外,还可以执行终止守护程序或查看其命令行的操作。管理Gradle主页:清除......
  • 解决Vscode报错 This may occur if... 问题
    今天在用Vscode写代码时,一直出现报错Thismayoccurif...,我一直在找路劲问题,但是发现自己的路径没有问题。执行task.josn时可以生成相应的.exe文件,就是在按下F5时,launch.json文件一直报这个错误,我再运行昨天写的代码,也不可以运行了,也是出现这个问题。之后经过不断查找和尝试,终于......
  • 视野修炼-技术周刊第88期 | 突出变量插件
    欢迎来到第88期的【视野修炼-技术周刊】,下面是本期的精选内容简介......
  • 微信同声传译小程序插件使用教程
    微信同声传译小程序插件——机器翻译、智能语音案例可搜索“一起学英语鸭”小程序查看, 实现效果如下图:插件功能语音转文字语音合成文本翻译 step1:添加插件在使用前,需要登录官网设置→第三方服务→添加插件搜索【微信同声传译】并添加在需要使......
  • vscode create python project virtual environment
     python3-mvenvvenvpipinstallrequests   #encoding:utf-8#版权所有2024涂聚文有限公司#许可信息查看:#描述:python3-mvenvvenv#pipinstallrequests#pipinstallboost###Author:geovindu,GeovinDu涂聚文.#IDE:vscodep......