Prechádzať zdrojové kódy

添加项目文件。

向羽 孟 3 týždňov pred
rodič
commit
1dcd3c9ec4
28 zmenil súbory, kde vykonal 1131 pridanie a 0 odobranie
  1. 87 0
      MvvmScaffoldFrame48.DLL/CameraTools/HikCamera.cs
  2. 60 0
      MvvmScaffoldFrame48.DLL/CameraTools/HikVision.cs
  3. BIN
      MvvmScaffoldFrame48.DLL/DLL/MvCameraControl.Net.dll
  4. BIN
      MvvmScaffoldFrame48.DLL/DLL/MvFGCtrlC.Net.dll
  5. 68 0
      MvvmScaffoldFrame48.DLL/MvvmScaffoldFrame48.Dll.csproj
  6. 33 0
      MvvmScaffoldFrame48.DLL/Properties/AssemblyInfo.cs
  7. 19 0
      MvvmScaffoldFrame48.DLL/UserManager.cs
  8. 18 0
      MvvmScaffoldFrame48.MODEL/HikVisionCamera/CameraInfoClassModel.cs
  9. 49 0
      MvvmScaffoldFrame48.MODEL/MvvmScaffoldFrame48.Model.csproj
  10. 33 0
      MvvmScaffoldFrame48.MODEL/Properties/AssemblyInfo.cs
  11. 14 0
      MvvmScaffoldFrame48.MODEL/UserModel.cs
  12. 22 0
      MvvmScaffoldFrame48.VIEWMODEL/BaseViewModel.cs
  13. 94 0
      MvvmScaffoldFrame48.VIEWMODEL/MainViewModel.cs
  14. 60 0
      MvvmScaffoldFrame48.VIEWMODEL/MvvmScaffoldFrame48.ViewModel.csproj
  15. 33 0
      MvvmScaffoldFrame48.VIEWMODEL/Properties/AssemblyInfo.cs
  16. 35 0
      MvvmScaffoldFrame48.VIEWMODEL/RelayComand.cs
  17. 43 0
      MvvmScaffoldFrame48.sln
  18. 6 0
      MvvmScaffoldFrame48/App.config
  19. 9 0
      MvvmScaffoldFrame48/App.xaml
  20. 17 0
      MvvmScaffoldFrame48/App.xaml.cs
  21. 27 0
      MvvmScaffoldFrame48/MainWindow.xaml
  22. 19 0
      MvvmScaffoldFrame48/MainWindow.xaml.cs
  23. 108 0
      MvvmScaffoldFrame48/MvvmScaffoldFrame48.csproj
  24. 52 0
      MvvmScaffoldFrame48/Properties/AssemblyInfo.cs
  25. 71 0
      MvvmScaffoldFrame48/Properties/Resources.Designer.cs
  26. 117 0
      MvvmScaffoldFrame48/Properties/Resources.resx
  27. 30 0
      MvvmScaffoldFrame48/Properties/Settings.Designer.cs
  28. 7 0
      MvvmScaffoldFrame48/Properties/Settings.settings

+ 87 - 0
MvvmScaffoldFrame48.DLL/CameraTools/HikCamera.cs

@@ -0,0 +1,87 @@
+using MvCameraControl;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MvvmScaffoldFrame48.DLL.CameraTools
+{
+    /// <summary>
+    /// 海康相机操作类
+    /// </summary>
+    public class HikCamera
+    {
+        /// <summary>
+        /// 相机实例
+        /// </summary>
+        private IDevice device;
+
+        /// <summary>
+        /// 相机构造函数
+        /// </summary>
+        /// <param name="device">相机实例</param>
+        /// <exception cref="Exception"></exception>
+        public HikCamera(IDevice device)
+        {
+            if (device == null)
+            {
+                throw new Exception("相机实例不能为空");
+            }
+            this.device = device;
+        }
+
+        /// <summary>
+        /// 相机构造函数
+        /// </summary>
+        /// <param name="deviceInfo">相机信息</param>
+        /// <exception cref="Exception"></exception>
+        public HikCamera(IDeviceInfo deviceInfo)
+        {
+            if (device != null && device.IsConnected)
+            {
+                device.Close();
+                device.Dispose();
+            }
+            try
+            {
+                // 打开设备
+                device = DeviceFactory.CreateDevice(deviceInfo);
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+
+            int result = device.Open();
+            if (result != MvError.MV_OK)
+            {
+                throw new Exception("打开相机失败");
+            }
+
+
+            // 判断是否为gige设备
+            if (device is IGigEDevice)
+            {
+                // 转换为gigE设备
+                IGigEDevice gigEDevice = device as IGigEDevice;
+
+                // 探测网络最佳包大小(只对GigE相机有效)
+                result = gigEDevice.GetOptimalPacketSize(out int optionPacketSize);
+
+                if (result != MvError.MV_OK)
+                {
+                    //Log("Warning: Get Packet Size failed!", result);
+                }
+                else
+                {
+                    result = device.Parameters.SetIntValue("GevSCPSPacketSize", (long)optionPacketSize);
+                    if (result != MvError.MV_OK)
+                    {
+                        //Log("Warning: Set Packet Size failed!", result);
+                    }
+                }
+            }
+        }
+    }
+}

+ 60 - 0
MvvmScaffoldFrame48.DLL/CameraTools/HikVision.cs

@@ -0,0 +1,60 @@
+using MvCameraControl;
+using MvvmScaffoldFrame48.Model.HikVisionCamera;
+using System.Collections.Generic;
+
+namespace MvvmScaffoldFrame48.DLL.CameraTools
+{
+    /// <summary>
+    /// HIKVISION相机类
+    /// </summary>
+    public static class HikVision
+    {
+        #region 常量
+        private readonly static DeviceTLayerType enumTLayerType = DeviceTLayerType.MvGigEDevice | DeviceTLayerType.MvUsbDevice
+|           DeviceTLayerType.MvGenTLGigEDevice | DeviceTLayerType.MvGenTLCXPDevice
+|           DeviceTLayerType.MvGenTLCameraLinkDevice | DeviceTLayerType.MvGenTLXoFDevice;
+        #endregion
+
+        #region 变量
+
+        #endregion
+
+        #region 实例
+        /// <summary>
+        /// 相机列表
+        /// </summary>
+        private static List<IDeviceInfo> CamList;
+        #endregion
+
+        #region 公共方法
+        /// <summary>
+        /// 获取相机列表
+        /// </summary>
+        /// <param name="CamList"></param>
+        /// <returns></returns>
+        public static void GetCameraList(out List<CameraInfoClassModel> CameraInfoList)
+        {
+            CamList = new List<IDeviceInfo>();
+            CameraInfoList = new List<CameraInfoClassModel>();
+            int nRet = DeviceEnumerator.EnumDevices(enumTLayerType, out CamList);
+            if (nRet != MvError.MV_OK)
+            {
+                return;
+            }
+            else
+            {
+                //输出相机名称及SN码以方便选择设备
+                foreach (var item in CamList)
+                {
+                    CameraInfoList.Add(new CameraInfoClassModel
+                    {
+                        DeviceName = item.ModelName,
+                        DeviceSN = item.SerialNumber,
+                    });
+                }
+            }
+            return;
+        }
+        #endregion
+    }
+}

BIN
MvvmScaffoldFrame48.DLL/DLL/MvCameraControl.Net.dll


BIN
MvvmScaffoldFrame48.DLL/DLL/MvFGCtrlC.Net.dll


+ 68 - 0
MvvmScaffoldFrame48.DLL/MvvmScaffoldFrame48.Dll.csproj

@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{75C34EE7-6921-492E-B2D4-0314F2F38AB5}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MvvmScaffoldFrame48.DLL</RootNamespace>
+    <AssemblyName>MvvmScaffoldFrame48.DLL</AssemblyName>
+    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="MvCameraControl.Net, Version=4.5.0.2, Culture=neutral, PublicKeyToken=a3c7c5e3a730cd12, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>DLL\MvCameraControl.Net.dll</HintPath>
+    </Reference>
+    <Reference Include="MvFGCtrlC.Net, Version=1.0.0.0, Culture=neutral, PublicKeyToken=52fddfb3f94be800, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>DLL\MvFGCtrlC.Net.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="CameraTools\HikCamera.cs" />
+    <Compile Include="CameraTools\HikVision.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="UserManager.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\MvvmScaffoldFrame48.MODEL\MvvmScaffoldFrame48.Model.csproj">
+      <Project>{56156576-9627-4624-9e1d-26aa7714d1c7}</Project>
+      <Name>MvvmScaffoldFrame48.Model</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="DLL\MvCameraControl.Net.dll" />
+    <Content Include="DLL\MvFGCtrlC.Net.dll" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 33 - 0
MvvmScaffoldFrame48.DLL/Properties/AssemblyInfo.cs

@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MvvmScaffoldFrame48.DLL")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MvvmScaffoldFrame48.DLL")]
+[assembly: AssemblyCopyright("Copyright ©  2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("75c34ee7-6921-492e-b2d4-0314f2f38ab5")]
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 19 - 0
MvvmScaffoldFrame48.DLL/UserManager.cs

@@ -0,0 +1,19 @@
+using MvvmScaffoldFrame48.Model;
+using System.Collections.ObjectModel;
+
+namespace MvvmScaffoldFrame48.DLL
+{
+    public static class UserManager
+    {
+        private static ObservableCollection<UserModel> users = new ObservableCollection<UserModel>();
+        public static ObservableCollection<UserModel> GetUsers()
+        {
+            return users;
+        }
+
+        public static void AddUser(UserModel user)
+        {
+            users.Add(user);
+        }
+    }
+}

+ 18 - 0
MvvmScaffoldFrame48.MODEL/HikVisionCamera/CameraInfoClassModel.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MvvmScaffoldFrame48.Model.HikVisionCamera
+{
+    /// <summary>
+    /// 相机初始化信息
+    /// </summary>
+    public class CameraInfoClassModel
+    {
+        public string DeviceName { get; set; }
+
+        public string DeviceSN { get; set; }
+    }
+}

+ 49 - 0
MvvmScaffoldFrame48.MODEL/MvvmScaffoldFrame48.Model.csproj

@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{56156576-9627-4624-9E1D-26AA7714D1C7}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MvvmScaffoldFrame48.Model</RootNamespace>
+    <AssemblyName>MvvmScaffoldFrame48.Model</AssemblyName>
+    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HikVisionCamera\CameraInfoClassModel.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="UserModel.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 33 - 0
MvvmScaffoldFrame48.MODEL/Properties/AssemblyInfo.cs

@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MvvmScaffoldFrame48.MODEL")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MvvmScaffoldFrame48.MODEL")]
+[assembly: AssemblyCopyright("Copyright ©  2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("56156576-9627-4624-9e1d-26aa7714d1c7")]
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 14 - 0
MvvmScaffoldFrame48.MODEL/UserModel.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MvvmScaffoldFrame48.Model
+{
+    public class UserModel
+    {
+        public string Name { get; set; }
+        public string Email { get; set; }
+    }
+}

+ 22 - 0
MvvmScaffoldFrame48.VIEWMODEL/BaseViewModel.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MvvmScaffoldFrame48.ViewModel
+{
+    /// <summary>
+    /// 视图逻辑基类
+    /// </summary>
+    public class BaseViewModel : INotifyPropertyChanged
+    {
+        public event PropertyChangedEventHandler PropertyChanged;
+
+        protected virtual void OnPropertyChanged(string propertyName)
+        {
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+        }
+    }
+}

+ 94 - 0
MvvmScaffoldFrame48.VIEWMODEL/MainViewModel.cs

@@ -0,0 +1,94 @@
+using MvvmScaffoldFrame48.DLL;
+using MvvmScaffoldFrame48.Model;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+
+namespace MvvmScaffoldFrame48.ViewModel
+{
+    public class MainViewModel : BaseViewModel
+    {
+        #region 界面绑定属性
+        public ObservableCollection<UserModel> Users { get; set; }
+
+        private string _name;
+        public string Name
+        {
+            get { return _name; }
+            set
+            {
+                if (_name != value)
+                {
+                    _name = value;
+                    OnPropertyChanged(nameof(Name));
+                }
+            }
+        }
+
+        private string _email;
+        public string Email
+        {
+            get { return _email; }
+            set
+            {
+                if (_email != value)
+                {
+                    _email = value;
+                    OnPropertyChanged(nameof(Email));
+                }
+            }
+        }
+        #endregion
+
+        #region 界面绑定事件
+        public ICommand AddUserCommand { get; set; }
+        public ICommand TestCommand { get; set; }
+        #endregion
+
+        #region 属性
+
+        #endregion
+
+        #region 绑定用Action方法
+        private void AddUser(object obj)
+        {
+            UserModel user = new UserModel();
+            user.Name = Name;
+            user.Email = Email;
+            UserManager.AddUser(user);
+        }
+
+        private void Test(object obj)
+        {
+            Name = "小1";
+            Email = "111@qq.com";
+        }
+        #endregion
+
+        #region 绑定用Predicate方法
+        private bool CanAddUser(object obj)
+        {
+            return true;
+        }
+
+        private bool CanTest(object obj)
+        {
+            return true;
+        }
+        #endregion
+
+        #region 其他方法
+        public MainViewModel()
+        {
+            Users = UserManager.GetUsers();
+            AddUserCommand = new RelayCommand(AddUser, CanAddUser);
+            TestCommand = new RelayCommand(Test, CanTest);
+        }
+        #endregion
+    }
+}

+ 60 - 0
MvvmScaffoldFrame48.VIEWMODEL/MvvmScaffoldFrame48.ViewModel.csproj

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{ACD4905A-4124-4A51-B9B1-C38D74B794F0}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MvvmScaffoldFrame48.ViewModel</RootNamespace>
+    <AssemblyName>MvvmScaffoldFrame48.ViewModel</AssemblyName>
+    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BaseViewModel.cs" />
+    <Compile Include="MainViewModel.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RelayComand.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\MvvmScaffoldFrame48.DLL\MvvmScaffoldFrame48.Dll.csproj">
+      <Project>{75c34ee7-6921-492e-b2d4-0314f2f38ab5}</Project>
+      <Name>MvvmScaffoldFrame48.Dll</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\MvvmScaffoldFrame48.MODEL\MvvmScaffoldFrame48.Model.csproj">
+      <Project>{56156576-9627-4624-9e1d-26aa7714d1c7}</Project>
+      <Name>MvvmScaffoldFrame48.Model</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 33 - 0
MvvmScaffoldFrame48.VIEWMODEL/Properties/AssemblyInfo.cs

@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MvvmScaffoldFrame48.VIEWMODEL")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MvvmScaffoldFrame48.VIEWMODEL")]
+[assembly: AssemblyCopyright("Copyright ©  2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("acd4905a-4124-4a51-b9b1-c38d74b794f0")]
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 35 - 0
MvvmScaffoldFrame48.VIEWMODEL/RelayComand.cs

@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+
+namespace MvvmScaffoldFrame48.ViewModel
+{
+    public class RelayCommand : ICommand
+    {
+
+        public event EventHandler CanExecuteChanged;
+
+        private Action<object> _Excute { get; set; }
+
+        private Predicate<object> _CanExcute { get; set; }
+
+        public RelayCommand(Action<object> ExcuteMethod, Predicate<object> CanExcuteMethod)
+        {
+            _Excute = ExcuteMethod;
+            _CanExcute = CanExcuteMethod;
+        }
+
+        public bool CanExecute(object parameter)
+        {
+            return _CanExcute(parameter);
+        }
+
+        public void Execute(object parameter)
+        {
+            _Excute(parameter);
+        }
+    }
+}

+ 43 - 0
MvvmScaffoldFrame48.sln

@@ -0,0 +1,43 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.14.36109.1 d17.14
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmScaffoldFrame48", "MvvmScaffoldFrame48\MvvmScaffoldFrame48.csproj", "{06B7CE96-EB5B-4495-9094-7F208D410A51}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmScaffoldFrame48.Dll", "MvvmScaffoldFrame48.DLL\MvvmScaffoldFrame48.Dll.csproj", "{75C34EE7-6921-492E-B2D4-0314F2F38AB5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmScaffoldFrame48.Model", "MvvmScaffoldFrame48.MODEL\MvvmScaffoldFrame48.Model.csproj", "{56156576-9627-4624-9E1D-26AA7714D1C7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmScaffoldFrame48.ViewModel", "MvvmScaffoldFrame48.VIEWMODEL\MvvmScaffoldFrame48.ViewModel.csproj", "{ACD4905A-4124-4A51-B9B1-C38D74B794F0}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{06B7CE96-EB5B-4495-9094-7F208D410A51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{06B7CE96-EB5B-4495-9094-7F208D410A51}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{06B7CE96-EB5B-4495-9094-7F208D410A51}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{06B7CE96-EB5B-4495-9094-7F208D410A51}.Release|Any CPU.Build.0 = Release|Any CPU
+		{75C34EE7-6921-492E-B2D4-0314F2F38AB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{75C34EE7-6921-492E-B2D4-0314F2F38AB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{75C34EE7-6921-492E-B2D4-0314F2F38AB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{75C34EE7-6921-492E-B2D4-0314F2F38AB5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{56156576-9627-4624-9E1D-26AA7714D1C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{56156576-9627-4624-9E1D-26AA7714D1C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{56156576-9627-4624-9E1D-26AA7714D1C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{56156576-9627-4624-9E1D-26AA7714D1C7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{ACD4905A-4124-4A51-B9B1-C38D74B794F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{ACD4905A-4124-4A51-B9B1-C38D74B794F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{ACD4905A-4124-4A51-B9B1-C38D74B794F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{ACD4905A-4124-4A51-B9B1-C38D74B794F0}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {9B538A8B-42B9-436F-8650-C70505F85D25}
+	EndGlobalSection
+EndGlobal

+ 6 - 0
MvvmScaffoldFrame48/App.config

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
+    </startup>
+</configuration>

+ 9 - 0
MvvmScaffoldFrame48/App.xaml

@@ -0,0 +1,9 @@
+<Application x:Class="MvvmScaffoldFrame48.App"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:local="clr-namespace:MvvmScaffoldFrame48"
+             StartupUri="MainWindow.xaml">
+    <Application.Resources>
+         
+    </Application.Resources>
+</Application>

+ 17 - 0
MvvmScaffoldFrame48/App.xaml.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace MvvmScaffoldFrame48
+{
+    /// <summary>
+    /// App.xaml 的交互逻辑
+    /// </summary>
+    public partial class App : Application
+    {
+    }
+}

+ 27 - 0
MvvmScaffoldFrame48/MainWindow.xaml

@@ -0,0 +1,27 @@
+<Window x:Class="MvvmScaffoldFrame48.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:MvvmScaffoldFrame48"
+        mc:Ignorable="d"
+        Title="MainWindow" Height="450" Width="800">
+    <Grid>
+        <StackPanel>
+            <ToolBar>
+                <Label Content="姓名:"></Label>
+                <TextBox Text="{Binding Name}"  Width="50"></TextBox>
+                <Label Content="邮箱:"></Label>
+                <TextBox Text="{Binding Email}" Width="100"></TextBox>
+                <Button Content="添加"
+                    Command="{Binding AddUserCommand }"></Button>
+                <Button Content="测试"
+                    Command="{Binding TestCommand }"></Button>
+            </ToolBar>
+            <StackPanel>
+                <DataGrid ItemsSource="{Binding Users}"></DataGrid>
+
+            </StackPanel>
+        </StackPanel>
+    </Grid>
+</Window>

+ 19 - 0
MvvmScaffoldFrame48/MainWindow.xaml.cs

@@ -0,0 +1,19 @@
+using MvvmScaffoldFrame48.ViewModel;
+using System.Windows;
+
+
+namespace MvvmScaffoldFrame48
+{
+    /// <summary>
+    /// MainWindow.xaml 的交互逻辑
+    /// </summary>
+    public partial class MainWindow : Window
+    {
+        public MainWindow()
+        {
+            InitializeComponent();
+            MainViewModel mainViewModel = new MainViewModel();
+            this.DataContext = mainViewModel;
+        }
+    }
+}

+ 108 - 0
MvvmScaffoldFrame48/MvvmScaffoldFrame48.csproj

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{06B7CE96-EB5B-4495-9094-7F208D410A51}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>MvvmScaffoldFrame48</RootNamespace>
+    <AssemblyName>MvvmScaffoldFrame48</AssemblyName>
+    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <ApplicationDefinition Include="App.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </ApplicationDefinition>
+    <Page Include="MainWindow.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="App.xaml.cs">
+      <DependentUpon>App.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="MainWindow.xaml.cs">
+      <DependentUpon>MainWindow.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\MvvmScaffoldFrame48.MODEL\MvvmScaffoldFrame48.Model.csproj">
+      <Project>{56156576-9627-4624-9e1d-26aa7714d1c7}</Project>
+      <Name>MvvmScaffoldFrame48.Model</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\MvvmScaffoldFrame48.VIEWMODEL\MvvmScaffoldFrame48.ViewModel.csproj">
+      <Project>{acd4905a-4124-4a51-b9b1-c38d74b794f0}</Project>
+      <Name>MvvmScaffoldFrame48.ViewModel</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 52 - 0
MvvmScaffoldFrame48/Properties/AssemblyInfo.cs

@@ -0,0 +1,52 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MvvmScaffoldFrame48")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MvvmScaffoldFrame48")]
+[assembly: AssemblyCopyright("Copyright ©  2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+//若要开始生成可本地化的应用程序,请设置
+//.csproj 文件中的 <UICulture>CultureYouAreCodingWith</UICulture>
+//在 <PropertyGroup> 中。例如,如果你使用的是美国英语。
+//使用的是美国英语,请将 <UICulture> 设置为 en-US。  然后取消
+//对以下 NeutralResourceLanguage 特性的注释。  更新
+//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+    ResourceDictionaryLocation.None, //主题特定资源词典所处位置
+                                     //(未在页面中找到资源时使用,
+                                     //或应用程序资源字典中找到时使用)
+    ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
+                                              //(未在页面中找到资源时使用,
+                                              //、应用程序或任何主题专用资源字典中找到时使用)
+)]
+
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 71 - 0
MvvmScaffoldFrame48/Properties/Resources.Designer.cs

@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本: 4.0.30319.42000
+//
+//     对此文件的更改可能导致不正确的行为,如果
+//     重新生成代码,则所做更改将丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace MvvmScaffoldFrame48.Properties
+{
+
+
+    /// <summary>
+    ///   强类型资源类,用于查找本地化字符串等。
+    /// </summary>
+    // 此类是由 StronglyTypedResourceBuilder
+    // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+    // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+    // (以 /str 作为命令选项),或重新生成 VS 项目。
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources
+    {
+
+        private static global::System.Resources.ResourceManager resourceMan;
+
+        private static global::System.Globalization.CultureInfo resourceCulture;
+
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources()
+        {
+        }
+
+        /// <summary>
+        ///   返回此类使用的缓存 ResourceManager 实例。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MvvmScaffoldFrame48.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   重写当前线程的 CurrentUICulture 属性,对
+        ///   使用此强类型资源类的所有资源查找执行重写。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 117 - 0
MvvmScaffoldFrame48/Properties/Resources.resx

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 30 - 0
MvvmScaffoldFrame48/Properties/Settings.Designer.cs

@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace MvvmScaffoldFrame48.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 7 - 0
MvvmScaffoldFrame48/Properties/Settings.settings

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>