diff --git a/.vs/HighWayIot/v16/.suo b/.vs/HighWayIot/v16/.suo
index d1e65301..3a0cb03a 100644
Binary files a/.vs/HighWayIot/v16/.suo and b/.vs/HighWayIot/v16/.suo differ
diff --git a/Aucma.Scada.UI/App.config b/Aucma.Scada.UI/App.config
new file mode 100644
index 00000000..b665e49c
--- /dev/null
+++ b/Aucma.Scada.UI/App.config
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Aucma.Scada.UI/App.xaml b/Aucma.Scada.UI/App.xaml
new file mode 100644
index 00000000..0b226d26
--- /dev/null
+++ b/Aucma.Scada.UI/App.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Aucma.Scada.UI/App.xaml.cs b/Aucma.Scada.UI/App.xaml.cs
new file mode 100644
index 00000000..089ebbfa
--- /dev/null
+++ b/Aucma.Scada.UI/App.xaml.cs
@@ -0,0 +1,132 @@
+using HighWayIot.Log4net;
+using Lierda.WPFHelper;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Threading;
+
+namespace Aucma.Scada.UI
+{
+ ///
+ /// App.xaml 的交互逻辑
+ ///
+ public partial class App : Application
+ {
+ private LogHelper logHelper = LogHelper.Instance;
+
+ System.Threading.Mutex mutex;
+
+ LierdaCracker cracker = new LierdaCracker();
+
+ public App()
+ {
+ this.Startup += new StartupEventHandler(App_StartUp);
+ this.Exit += new ExitEventHandler(Application_Exit);
+
+ }
+
+ void App_StartUp(object sender, StartupEventArgs e)
+ {
+ bool ret;
+ mutex = new System.Threading.Mutex(true, System.Diagnostics.Process.GetCurrentProcess().ProcessName, out ret);
+ if (!ret)
+ {
+ MessageBox.Show("应用程序已开启,禁止重复运行");
+ Environment.Exit(0);
+ }
+ }
+ private void Application_Exit(object sender, ExitEventArgs e)
+ {
+ logHelper.Info("程序退出");
+ }
+
+ protected override void OnStartup(StartupEventArgs e)
+ {
+ cracker.Cracker(100); //设置GC回收间隔
+ RegisterEvents();
+ base.OnStartup(e);
+ }
+
+ private void RegisterEvents()
+ {
+ TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
+ this.DispatcherUnhandledException += App_DispatcherUnhandledException;
+ AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandleException;
+ }
+
+ ///
+ /// Task线程异常捕获
+ ///
+ ///
+ ///
+ private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
+ {
+ try
+ {
+ var exception = e.Exception as Exception;
+ if (exception != null)
+ {
+ logHelper.Error("Task线程全局异常捕获成功", exception);
+ }
+ }
+ catch (Exception ex)
+ {
+ logHelper.Error("Task线程全局异常捕获", ex);
+ }
+ finally
+ {
+ e.SetObserved();
+ }
+ }
+
+ ///
+ /// UI线程异常捕获
+ ///
+ ///
+ ///
+ private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
+ {
+ try
+ {
+ logHelper.Error("UI线程全局异常捕获成功", e.Exception);
+ }
+ catch (Exception ex)
+ {
+ logHelper.Error("UI线程全局异常捕获", ex);
+ }
+ finally
+ {
+ e.Handled = true;
+ }
+ }
+
+ ///
+ /// 非UI线程异常捕获
+ ///
+ ///
+ ///
+ private void CurrentDomain_UnhandleException(object sender, UnhandledExceptionEventArgs e)
+ {
+ try
+ {
+ var exception = e.ExceptionObject as Exception;
+ if (exception != null)
+ {
+ logHelper.Error("非UI线程全局异常捕获成功", exception);
+ }
+ }
+ catch (Exception ex)
+ {
+ logHelper.Error("非UI线程全局异常捕获", ex);
+ }
+ finally
+ {
+ //e.SetObserved();
+ }
+ }
+ }
+}
diff --git a/Aucma.Scada.UI/Aucma.Scada.UI.csproj b/Aucma.Scada.UI/Aucma.Scada.UI.csproj
new file mode 100644
index 00000000..121ff12e
--- /dev/null
+++ b/Aucma.Scada.UI/Aucma.Scada.UI.csproj
@@ -0,0 +1,173 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {43123E0B-B3B0-4FB4-A508-007D644B3E7C}
+ WinExe
+ Aucma.Scada.UI
+ Aucma.Scada.UI
+ v4.8
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\packages\CommonServiceLocator.2.0.2\lib\net47\CommonServiceLocator.dll
+
+
+ ..\packages\MvvmLightLibs.5.4.1.1\lib\net45\GalaSoft.MvvmLight.dll
+
+
+ ..\packages\MvvmLightLibs.5.4.1.1\lib\net45\GalaSoft.MvvmLight.Extras.dll
+
+
+ ..\packages\MvvmLightLibs.5.4.1.1\lib\net45\GalaSoft.MvvmLight.Platform.dll
+
+
+ ..\HighWayIot.Library\Lierda.WPFHelper.dll
+
+
+ ..\HighWayIot.Library\MySql.Data.dll
+
+
+ ..\HighWayIot.Library\Oracle.ManagedDataAccess.dll
+
+
+ ..\HighWayIot.Library\SqlSugar.dll
+
+
+
+
+ ..\HighWayIot.Library\System.Data.SQLite.dll
+
+
+ ..\packages\MvvmLightLibs.5.4.1.1\lib\net45\System.Windows.Interactivity.dll
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ IndexControl.xaml
+
+
+ LogInfoControl.xaml
+
+
+ RecordControl.xaml
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+ App.xaml
+ Code
+
+
+ MainWindow.xaml
+ Code
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
+
+
+
+ {deabc30c-ec6f-472e-bd67-d65702fdaf74}
+ HighWayIot.Log4net
+
+
+ {d0dc3cfb-6748-4d5e-b56a-76fdc72ab4b3}
+ HighWayIot.Repository
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Aucma.Scada.UI/Icon.png b/Aucma.Scada.UI/Icon.png
new file mode 100644
index 00000000..15604655
Binary files /dev/null and b/Aucma.Scada.UI/Icon.png differ
diff --git a/Aucma.Scada.UI/IndexControl.xaml b/Aucma.Scada.UI/IndexControl.xaml
new file mode 100644
index 00000000..bd724292
--- /dev/null
+++ b/Aucma.Scada.UI/IndexControl.xaml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/Aucma.Scada.UI/IndexControl.xaml.cs b/Aucma.Scada.UI/IndexControl.xaml.cs
new file mode 100644
index 00000000..8984935e
--- /dev/null
+++ b/Aucma.Scada.UI/IndexControl.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Aucma.Scada.UI
+{
+ ///
+ /// IndexControl.xaml 的交互逻辑
+ ///
+ public partial class IndexControl : UserControl
+ {
+ public IndexControl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Aucma.Scada.UI/LogInfoControl.xaml b/Aucma.Scada.UI/LogInfoControl.xaml
new file mode 100644
index 00000000..f593d462
--- /dev/null
+++ b/Aucma.Scada.UI/LogInfoControl.xaml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/Aucma.Scada.UI/LogInfoControl.xaml.cs b/Aucma.Scada.UI/LogInfoControl.xaml.cs
new file mode 100644
index 00000000..e33b5662
--- /dev/null
+++ b/Aucma.Scada.UI/LogInfoControl.xaml.cs
@@ -0,0 +1,33 @@
+using Aucma.Scada.UI.viewModel;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Aucma.Scada.UI
+{
+ ///
+ /// LogInfoControl.xaml 的交互逻辑
+ ///
+ public partial class LogInfoControl : UserControl
+ {
+
+ public LogInfoControl()
+ {
+ InitializeComponent();
+
+ LogInfoViewModel logInfoViewModel = new LogInfoViewModel();
+ this.DataContext = logInfoViewModel;
+ }
+ }
+}
diff --git a/Aucma.Scada.UI/MainWindow.xaml b/Aucma.Scada.UI/MainWindow.xaml
new file mode 100644
index 00000000..4ebc72e4
--- /dev/null
+++ b/Aucma.Scada.UI/MainWindow.xaml
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Aucma.Scada.UI/MainWindow.xaml.cs b/Aucma.Scada.UI/MainWindow.xaml.cs
new file mode 100644
index 00000000..9e23f9d0
--- /dev/null
+++ b/Aucma.Scada.UI/MainWindow.xaml.cs
@@ -0,0 +1,31 @@
+using Aucma.Scada.UI.viewModel;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Aucma.Scada.UI
+{
+ ///
+ /// MainWindow.xaml 的交互逻辑
+ ///
+ public partial class MainWindow : Window
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+ MainViewModel mainViewModel = new MainViewModel();
+ this.DataContext = mainViewModel;
+ }
+ }
+}
diff --git a/Aucma.Scada.UI/Properties/AssemblyInfo.cs b/Aucma.Scada.UI/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..a6172883
--- /dev/null
+++ b/Aucma.Scada.UI/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("Aucma.Scada.UI")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Aucma.Scada.UI")]
+[assembly: AssemblyCopyright("Copyright © 2023")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+//若要开始生成可本地化的应用程序,请设置
+//.csproj 文件中的 CultureYouAreCodingWith
+//例如,如果您在源文件中使用的是美国英语,
+//使用的是美国英语,请将 设置为 en-US。 然后取消
+//对以下 NeutralResourceLanguage 特性的注释。 更新
+//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //主题特定资源词典所处位置
+ //(未在页面中找到资源时使用,
+ //或应用程序资源字典中找到时使用)
+ ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
+ //(未在页面中找到资源时使用,
+ //、应用程序或任何主题专用资源字典中找到时使用)
+)]
+
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Aucma.Scada.UI/Properties/Resources.Designer.cs b/Aucma.Scada.UI/Properties/Resources.Designer.cs
new file mode 100644
index 00000000..5728aca2
--- /dev/null
+++ b/Aucma.Scada.UI/Properties/Resources.Designer.cs
@@ -0,0 +1,70 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本: 4.0.30319.42000
+//
+// 对此文件的更改可能导致不正确的行为,如果
+// 重新生成代码,则所做更改将丢失。
+//
+//------------------------------------------------------------------------------
+
+
+namespace Aucma.Scada.UI.Properties
+{
+ ///
+ /// 强类型资源类,用于查找本地化字符串等。
+ ///
+ // 此类是由 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()
+ {
+ }
+
+ ///
+ /// 返回此类使用的缓存 ResourceManager 实例。
+ ///
+ [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("Aucma.Scada.UI.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 重写当前线程的 CurrentUICulture 属性,对
+ /// 使用此强类型资源类的所有资源查找执行重写。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Aucma.Scada.UI/Properties/Resources.resx b/Aucma.Scada.UI/Properties/Resources.resx
new file mode 100644
index 00000000..af7dbebb
--- /dev/null
+++ b/Aucma.Scada.UI/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Aucma.Scada.UI/Properties/Settings.Designer.cs b/Aucma.Scada.UI/Properties/Settings.Designer.cs
new file mode 100644
index 00000000..c93333db
--- /dev/null
+++ b/Aucma.Scada.UI/Properties/Settings.Designer.cs
@@ -0,0 +1,29 @@
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+
+namespace Aucma.Scada.UI.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;
+ }
+ }
+ }
+}
diff --git a/Aucma.Scada.UI/Properties/Settings.settings b/Aucma.Scada.UI/Properties/Settings.settings
new file mode 100644
index 00000000..033d7a5e
--- /dev/null
+++ b/Aucma.Scada.UI/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Aucma.Scada.UI/RecordControl.xaml b/Aucma.Scada.UI/RecordControl.xaml
new file mode 100644
index 00000000..12f3082f
--- /dev/null
+++ b/Aucma.Scada.UI/RecordControl.xaml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Aucma.Scada.UI/RecordControl.xaml.cs b/Aucma.Scada.UI/RecordControl.xaml.cs
new file mode 100644
index 00000000..af7d1265
--- /dev/null
+++ b/Aucma.Scada.UI/RecordControl.xaml.cs
@@ -0,0 +1,34 @@
+using Aucma.Scada.UI.viewModel;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Aucma.Scada.UI
+{
+ ///
+ /// RecordControl.xaml 的交互逻辑
+ ///
+ public partial class RecordControl : UserControl
+ {
+ public RecordControl()
+ {
+ InitializeComponent();
+ RecordViewModel viewModel = new RecordViewModel();
+ viewModel.Query();
+
+ //上下文绑定
+ this.DataContext = viewModel;
+ }
+ }
+}
diff --git a/Aucma.Scada.UI/bin/Debug/Aucma.Scada.UI.exe b/Aucma.Scada.UI/bin/Debug/Aucma.Scada.UI.exe
new file mode 100644
index 00000000..d7972bd2
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/Aucma.Scada.UI.exe differ
diff --git a/Aucma.Scada.UI/bin/Debug/Aucma.Scada.UI.exe.config b/Aucma.Scada.UI/bin/Debug/Aucma.Scada.UI.exe.config
new file mode 100644
index 00000000..ff4c94c5
--- /dev/null
+++ b/Aucma.Scada.UI/bin/Debug/Aucma.Scada.UI.exe.config
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Aucma.Scada.UI/bin/Debug/Aucma.Scada.UI.pdb b/Aucma.Scada.UI/bin/Debug/Aucma.Scada.UI.pdb
new file mode 100644
index 00000000..8aab80fe
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/Aucma.Scada.UI.pdb differ
diff --git a/Aucma.Scada.UI/bin/Debug/CommonServiceLocator.dll b/Aucma.Scada.UI/bin/Debug/CommonServiceLocator.dll
new file mode 100644
index 00000000..87200620
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/CommonServiceLocator.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Extras.dll b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Extras.dll
new file mode 100644
index 00000000..cb1b9f98
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Extras.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Extras.pdb b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Extras.pdb
new file mode 100644
index 00000000..3e682210
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Extras.pdb differ
diff --git a/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Extras.xml b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Extras.xml
new file mode 100644
index 00000000..102374b2
--- /dev/null
+++ b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Extras.xml
@@ -0,0 +1,465 @@
+
+
+
+ GalaSoft.MvvmLight.Extras
+
+
+
+
+ Helper class for platform detection.
+
+
+
+
+ A very simple IOC container with basic functionality needed to register and resolve
+ instances. If needed, this class can be replaced by another more elaborate
+ IOC container implementing the IServiceLocator interface.
+ The inspiration for this class is at https://gist.github.com/716137 but it has
+ been extended with additional features.
+
+
+
+
+ Checks whether at least one instance of a given class is already created in the container.
+
+ The class that is queried.
+ True if at least on instance of the class is already created, false otherwise.
+
+
+
+ Checks whether the instance with the given key is already created for a given class
+ in the container.
+
+ The class that is queried.
+ The key that is queried.
+ True if the instance with the given key is already registered for the given class,
+ false otherwise.
+
+
+
+ Gets a value indicating whether a given type T is already registered.
+
+ The type that the method checks for.
+ True if the type is registered, false otherwise.
+
+
+
+ Gets a value indicating whether a given type T and a give key
+ are already registered.
+
+ The type that the method checks for.
+ The key that the method checks for.
+ True if the type and key are registered, false otherwise.
+
+
+
+ Registers a given type for a given interface.
+
+ The interface for which instances will be resolved.
+ The type that must be used to create instances.
+
+
+
+ Registers a given type for a given interface with the possibility for immediate
+ creation of the instance.
+
+ The interface for which instances will be resolved.
+ The type that must be used to create instances.
+ If true, forces the creation of the default
+ instance of the provided class.
+
+
+
+ Registers a given type.
+
+ The type that must be used to create instances.
+
+
+
+ Registers a given type with the possibility for immediate
+ creation of the instance.
+
+ The type that must be used to create instances.
+ If true, forces the creation of the default
+ instance of the provided class.
+
+
+
+ Registers a given instance for a given type.
+
+ The type that is being registered.
+ The factory method able to create the instance that
+ must be returned when the given type is resolved.
+
+
+
+ Registers a given instance for a given type with the possibility for immediate
+ creation of the instance.
+
+ The type that is being registered.
+ The factory method able to create the instance that
+ must be returned when the given type is resolved.
+ If true, forces the creation of the default
+ instance of the provided class.
+
+
+
+ Registers a given instance for a given type and a given key.
+
+ The type that is being registered.
+ The factory method able to create the instance that
+ must be returned when the given type is resolved.
+ The key for which the given instance is registered.
+
+
+
+ Registers a given instance for a given type and a given key with the possibility for immediate
+ creation of the instance.
+
+ The type that is being registered.
+ The factory method able to create the instance that
+ must be returned when the given type is resolved.
+ The key for which the given instance is registered.
+ If true, forces the creation of the default
+ instance of the provided class.
+
+
+
+ Resets the instance in its original states. This deletes all the
+ registrations.
+
+
+
+
+ Unregisters a class from the cache and removes all the previously
+ created instances.
+
+ The class that must be removed.
+
+
+
+ Removes the given instance from the cache. The class itself remains
+ registered and can be used to create other instances.
+
+ The type of the instance to be removed.
+ The instance that must be removed.
+
+
+
+ Removes the instance corresponding to the given key from the cache. The class itself remains
+ registered and can be used to create other instances.
+
+ The type of the instance to be removed.
+ The key corresponding to the instance that must be removed.
+
+
+
+ When used with the SimpleIoc container, specifies which constructor
+ should be used to instantiate when GetInstance is called.
+ If there is only one constructor in the class, this attribute is
+ not needed.
+
+
+
+
+ A very simple IOC container with basic functionality needed to register and resolve
+ instances. If needed, this class can be replaced by another more elaborate
+ IOC container implementing the IServiceLocator interface.
+ The inspiration for this class is at https://gist.github.com/716137 but it has
+ been extended with additional features.
+
+
+
+
+ This class' default instance.
+
+
+
+
+ Checks whether at least one instance of a given class is already created in the container.
+
+ The class that is queried.
+ True if at least on instance of the class is already created, false otherwise.
+
+
+
+ Checks whether the instance with the given key is already created for a given class
+ in the container.
+
+ The class that is queried.
+ The key that is queried.
+ True if the instance with the given key is already registered for the given class,
+ false otherwise.
+
+
+
+ Gets a value indicating whether a given type T is already registered.
+
+ The type that the method checks for.
+ True if the type is registered, false otherwise.
+
+
+
+ Gets a value indicating whether a given type T and a give key
+ are already registered.
+
+ The type that the method checks for.
+ The key that the method checks for.
+ True if the type and key are registered, false otherwise.
+
+
+
+ Registers a given type for a given interface.
+
+ The interface for which instances will be resolved.
+ The type that must be used to create instances.
+
+
+
+ Registers a given type for a given interface with the possibility for immediate
+ creation of the instance.
+
+ The interface for which instances will be resolved.
+ The type that must be used to create instances.
+ If true, forces the creation of the default
+ instance of the provided class.
+
+
+
+ Registers a given type.
+
+ The type that must be used to create instances.
+
+
+
+ Registers a given type with the possibility for immediate
+ creation of the instance.
+
+ The type that must be used to create instances.
+ If true, forces the creation of the default
+ instance of the provided class.
+
+
+
+ Registers a given instance for a given type.
+
+ The type that is being registered.
+ The factory method able to create the instance that
+ must be returned when the given type is resolved.
+
+
+
+ Registers a given instance for a given type with the possibility for immediate
+ creation of the instance.
+
+ The type that is being registered.
+ The factory method able to create the instance that
+ must be returned when the given type is resolved.
+ If true, forces the creation of the default
+ instance of the provided class.
+
+
+
+ Registers a given instance for a given type and a given key.
+
+ The type that is being registered.
+ The factory method able to create the instance that
+ must be returned when the given type is resolved.
+ The key for which the given instance is registered.
+
+
+
+ Registers a given instance for a given type and a given key with the possibility for immediate
+ creation of the instance.
+
+ The type that is being registered.
+ The factory method able to create the instance that
+ must be returned when the given type is resolved.
+ The key for which the given instance is registered.
+ If true, forces the creation of the default
+ instance of the provided class.
+
+
+
+ Resets the instance in its original states. This deletes all the
+ registrations.
+
+
+
+
+ Unregisters a class from the cache and removes all the previously
+ created instances.
+
+ The class that must be removed.
+
+
+
+ Removes the given instance from the cache. The class itself remains
+ registered and can be used to create other instances.
+
+ The type of the instance to be removed.
+ The instance that must be removed.
+
+
+
+ Removes the instance corresponding to the given key from the cache. The class itself remains
+ registered and can be used to create other instances.
+
+ The type of the instance to be removed.
+ The key corresponding to the instance that must be removed.
+
+
+
+ Provides a way to get all the created instances of a given type available in the
+ cache. Registering a class or a factory does not automatically
+ create the corresponding instance! To create an instance, either register
+ the class or the factory with createInstanceImmediately set to true,
+ or call the GetInstance method before calling GetAllCreatedInstances.
+ Alternatively, use the GetAllInstances method, which auto-creates default
+ instances for all registered classes.
+
+ The class of which all instances
+ must be returned.
+ All the already created instances of the given type.
+
+
+
+ Provides a way to get all the created instances of a given type available in the
+ cache. Registering a class or a factory does not automatically
+ create the corresponding instance! To create an instance, either register
+ the class or the factory with createInstanceImmediately set to true,
+ or call the GetInstance method before calling GetAllCreatedInstances.
+ Alternatively, use the GetAllInstances method, which auto-creates default
+ instances for all registered classes.
+
+ The class of which all instances
+ must be returned.
+ All the already created instances of the given type.
+
+
+
+ Gets the service object of the specified type.
+
+ If the type serviceType has not
+ been registered before calling this method.
+
+ A service object of type .
+
+ An object that specifies the type of service object to get.
+
+
+
+ Provides a way to get all the created instances of a given type available in the
+ cache. Calling this method auto-creates default
+ instances for all registered classes.
+
+ The class of which all instances
+ must be returned.
+ All the instances of the given type.
+
+
+
+ Provides a way to get all the created instances of a given type available in the
+ cache. Calling this method auto-creates default
+ instances for all registered classes.
+
+ The class of which all instances
+ must be returned.
+ All the instances of the given type.
+
+
+
+ Provides a way to get an instance of a given type. If no instance had been instantiated
+ before, a new instance will be created. If an instance had already
+ been created, that same instance will be returned.
+
+ If the type serviceType has not
+ been registered before calling this method.
+ The class of which an instance
+ must be returned.
+ An instance of the given type.
+
+
+
+ Provides a way to get an instance of a given type. This method
+ always returns a new instance and doesn't cache it in the IOC container.
+
+ If the type serviceType has not
+ been registered before calling this method.
+ The class of which an instance
+ must be returned.
+ An instance of the given type.
+
+
+
+ Provides a way to get an instance of a given type corresponding
+ to a given key. If no instance had been instantiated with this
+ key before, a new instance will be created. If an instance had already
+ been created with the same key, that same instance will be returned.
+
+ If the type serviceType has not
+ been registered before calling this method.
+ The class of which an instance must be returned.
+ The key uniquely identifying this instance.
+ An instance corresponding to the given type and key.
+
+
+
+ Provides a way to get an instance of a given type. This method
+ always returns a new instance and doesn't cache it in the IOC container.
+
+ If the type serviceType has not
+ been registered before calling this method.
+ The class of which an instance must be returned.
+ The key uniquely identifying this instance.
+ An instance corresponding to the given type and key.
+
+
+
+ Provides a way to get an instance of a given type. If no instance had been instantiated
+ before, a new instance will be created. If an instance had already
+ been created, that same instance will be returned.
+
+ If the type TService has not
+ been registered before calling this method.
+ The class of which an instance
+ must be returned.
+ An instance of the given type.
+
+
+
+ Provides a way to get an instance of a given type. This method
+ always returns a new instance and doesn't cache it in the IOC container.
+
+ If the type TService has not
+ been registered before calling this method.
+ The class of which an instance
+ must be returned.
+ An instance of the given type.
+
+
+
+ Provides a way to get an instance of a given type corresponding
+ to a given key. If no instance had been instantiated with this
+ key before, a new instance will be created. If an instance had already
+ been created with the same key, that same instance will be returned.
+
+ If the type TService has not
+ been registered before calling this method.
+ The class of which an instance must be returned.
+ The key uniquely identifying this instance.
+ An instance corresponding to the given type and key.
+
+
+
+ Provides a way to get an instance of a given type. This method
+ always returns a new instance and doesn't cache it in the IOC container.
+
+ If the type TService has not
+ been registered before calling this method.
+ The class of which an instance must be returned.
+ The key uniquely identifying this instance.
+ An instance corresponding to the given type and key.
+
+
+
diff --git a/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Platform.dll b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Platform.dll
new file mode 100644
index 00000000..a5f2b222
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Platform.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Platform.pdb b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Platform.pdb
new file mode 100644
index 00000000..573a5162
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Platform.pdb differ
diff --git a/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Platform.xml b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Platform.xml
new file mode 100644
index 00000000..ea0055fa
--- /dev/null
+++ b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.Platform.xml
@@ -0,0 +1,350 @@
+
+
+
+ GalaSoft.MvvmLight.Platform
+
+
+
+
+ A command whose sole purpose is to relay its functionality to other
+ objects by invoking delegates. The default return value for the CanExecute
+ method is 'true'. This class does not allow you to accept command parameters in the
+ Execute and CanExecute callback methods.
+
+ If you are using this class in WPF4.5 or above, you need to use the
+ GalaSoft.MvvmLight.CommandWpf namespace (instead of GalaSoft.MvvmLight.Command).
+ This will enable (or restore) the CommandManager class which handles
+ automatic enabling/disabling of controls based on the CanExecute delegate.
+
+
+
+ Initializes a new instance of the RelayCommand class that
+ can always execute.
+
+ The execution logic. IMPORTANT: If the action causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is causing a closure. See
+ http://galasoft.ch/s/mvvmweakaction.
+ If the execute argument is null.
+
+
+
+ Initializes a new instance of the RelayCommand class.
+
+ The execution logic. IMPORTANT: If the action causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ The execution status logic. IMPORTANT: If the func causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is causing a closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+ If the execute argument is null.
+
+
+
+ Occurs when changes occur that affect whether the command should execute.
+
+
+
+
+ Raises the event.
+
+
+
+
+ Defines the method that determines whether the command can execute in its current state.
+
+ This parameter will always be ignored.
+ true if this command can be executed; otherwise, false.
+
+
+
+ Defines the method to be called when the command is invoked.
+
+ This parameter will always be ignored.
+
+
+
+ A generic command whose sole purpose is to relay its functionality to other
+ objects by invoking delegates. The default return value for the CanExecute
+ method is 'true'. This class allows you to accept command parameters in the
+ Execute and CanExecute callback methods.
+
+ The type of the command parameter.
+ If you are using this class in WPF4.5 or above, you need to use the
+ GalaSoft.MvvmLight.CommandWpf namespace (instead of GalaSoft.MvvmLight.Command).
+ This will enable (or restore) the CommandManager class which handles
+ automatic enabling/disabling of controls based on the CanExecute delegate.
+
+
+
+ Initializes a new instance of the RelayCommand class that
+ can always execute.
+
+ The execution logic. IMPORTANT: If the action causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is causing a closure. See
+ http://galasoft.ch/s/mvvmweakaction.
+ If the execute argument is null.
+
+
+
+ Initializes a new instance of the RelayCommand class.
+
+ The execution logic. IMPORTANT: If the action causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ The execution status logic. IMPORTANT: If the func causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is causing a closure. See
+ http://galasoft.ch/s/mvvmweakaction.
+ If the execute argument is null.
+
+
+
+ Occurs when changes occur that affect whether the command should execute.
+
+
+
+
+ Raises the event.
+
+
+
+
+ Defines the method that determines whether the command can execute in its current state.
+
+ Data used by the command. If the command does not require data
+ to be passed, this object can be set to a null reference
+ true if this command can be executed; otherwise, false.
+
+
+
+ Defines the method to be called when the command is invoked.
+
+ Data used by the command. If the command does not require data
+ to be passed, this object can be set to a null reference
+
+
+
+ This can be
+ used to bind any event on any FrameworkElement to an .
+ Typically, this element is used in XAML to connect the attached element
+ to a command located in a ViewModel. This trigger can only be attached
+ to a FrameworkElement or a class deriving from FrameworkElement.
+ To access the EventArgs of the fired event, use a RelayCommand<EventArgs>
+ and leave the CommandParameter and CommandParameterValue empty!
+
+
+
+
+ Identifies the dependency property
+
+
+
+
+ Identifies the dependency property
+
+
+
+
+ Identifies the dependency property
+
+
+
+
+ Gets or sets the ICommand that this trigger is bound to. This
+ is a DependencyProperty.
+
+
+
+
+ Gets or sets an object that will be passed to the
+ attached to this trigger. This is a DependencyProperty.
+
+
+
+
+ Gets or sets an object that will be passed to the
+ attached to this trigger. This property is here for compatibility
+ with the Silverlight version. This is NOT a DependencyProperty.
+ For databinding, use the property.
+
+
+
+
+ Gets or sets a value indicating whether the attached element must be
+ disabled when the property's CanExecuteChanged
+ event fires. If this property is true, and the command's CanExecute
+ method returns false, the element will be disabled. If this property
+ is false, the element will not be disabled when the command's
+ CanExecute method changes. This is a DependencyProperty.
+
+
+
+
+ Gets or sets a value indicating whether the attached element must be
+ disabled when the property's CanExecuteChanged
+ event fires. If this property is true, and the command's CanExecute
+ method returns false, the element will be disabled. This property is here for
+ compatibility with the Silverlight version. This is NOT a DependencyProperty.
+ For databinding, use the property.
+
+
+
+
+ Called when this trigger is attached to a FrameworkElement.
+
+
+
+
+ This method is here for compatibility
+ with the Silverlight version.
+
+ The FrameworkElement to which this trigger
+ is attached.
+
+
+
+ This method is here for compatibility
+ with the Silverlight 3 version.
+
+ The command that must be executed when
+ this trigger is invoked.
+
+
+
+ Specifies whether the EventArgs of the event that triggered this
+ action should be passed to the bound RelayCommand. If this is true,
+ the command should accept arguments of the corresponding
+ type (for example RelayCommand<MouseButtonEventArgs>).
+
+
+
+
+ Gets or sets a converter used to convert the EventArgs when using
+ . If PassEventArgsToCommand is false,
+ this property is never used.
+
+
+
+
+ The dependency property's name.
+
+
+
+
+ Gets or sets a parameters for the converter used to convert the EventArgs when using
+ . If PassEventArgsToCommand is false,
+ this property is never used. This is a dependency property.
+
+
+
+
+ Identifies the dependency property.
+
+
+
+
+ The dependency property's name.
+
+
+
+
+ Gets or sets a value indicating if the command should be invoked even
+ if the attached control is disabled. This is a dependency property.
+
+
+
+
+ Identifies the dependency property.
+
+
+
+
+ Provides a simple way to invoke this trigger programatically
+ without any EventArgs.
+
+
+
+
+ Executes the trigger.
+ To access the EventArgs of the fired event, use a RelayCommand<EventArgs>
+ and leave the CommandParameter and CommandParameterValue empty!
+
+ The EventArgs of the fired event.
+
+
+
+ The definition of the converter used to convert an EventArgs
+ in the class, if the
+ property is true.
+ Set an instance of this class to the
+ property of the EventToCommand instance.
+
+
+
+
+ The method used to convert the EventArgs instance.
+
+ An instance of EventArgs passed by the
+ event that the EventToCommand instance is handling.
+ An optional parameter used for the conversion. Use
+ the property
+ to set this value. This may be null.
+ The converted value.
+
+
+
+ Helper class for dispatcher operations on the UI thread.
+
+
+
+
+ Gets a reference to the UI thread's dispatcher, after the
+ method has been called on the UI thread.
+
+
+
+
+ Executes an action on the UI thread. If this method is called
+ from the UI thread, the action is executed immendiately. If the
+ method is called from another thread, the action will be enqueued
+ on the UI thread's dispatcher and executed asynchronously.
+ For additional operations on the UI thread, you can get a
+ reference to the UI thread's dispatcher thanks to the property
+ .
+
+ The action that will be executed on the UI
+ thread.
+
+
+
+ Invokes an action asynchronously on the UI thread.
+
+ The action that must be executed.
+ An object, which is returned immediately after BeginInvoke is called, that can be used to interact
+ with the delegate as it is pending execution in the event queue.
+
+
+
+ This method should be called once on the UI thread to ensure that
+ the property is initialized.
+ In a Silverlight application, call this method in the
+ Application_Startup event handler, after the MainPage is constructed.
+ In WPF, call this method on the static App() constructor.
+
+
+
+
+ Resets the class by deleting the
+
+
+
+
diff --git a/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.dll b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.dll
new file mode 100644
index 00000000..64ce68e4
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.pdb b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.pdb
new file mode 100644
index 00000000..0f702030
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.pdb differ
diff --git a/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.xml b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.xml
new file mode 100644
index 00000000..59601988
--- /dev/null
+++ b/Aucma.Scada.UI/bin/Debug/GalaSoft.MvvmLight.xml
@@ -0,0 +1,1812 @@
+
+
+
+ GalaSoft.MvvmLight
+
+
+
+
+ A command whose sole purpose is to relay its functionality to other
+ objects by invoking delegates. The default return value for the CanExecute
+ method is 'true'. This class does not allow you to accept command parameters in the
+ Execute and CanExecute callback methods.
+
+ If you are using this class in WPF4.5 or above, you need to use the
+ GalaSoft.MvvmLight.CommandWpf namespace (instead of GalaSoft.MvvmLight.Command).
+ This will enable (or restore) the CommandManager class which handles
+ automatic enabling/disabling of controls based on the CanExecute delegate.
+
+
+
+ Initializes a new instance of the RelayCommand class that
+ can always execute.
+
+ The execution logic. IMPORTANT: If the action causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is causing a closure. See
+ http://galasoft.ch/s/mvvmweakaction.
+ If the execute argument is null.
+
+
+
+ Initializes a new instance of the RelayCommand class.
+
+ The execution logic. IMPORTANT: If the action causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ The execution status logic. IMPORTANT: If the func causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is causing a closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+ If the execute argument is null.
+
+
+
+ Occurs when changes occur that affect whether the command should execute.
+
+
+
+
+ Raises the event.
+
+
+
+
+ Defines the method that determines whether the command can execute in its current state.
+
+ This parameter will always be ignored.
+ true if this command can be executed; otherwise, false.
+
+
+
+ Defines the method to be called when the command is invoked.
+
+ This parameter will always be ignored.
+
+
+
+ A generic command whose sole purpose is to relay its functionality to other
+ objects by invoking delegates. The default return value for the CanExecute
+ method is 'true'. This class allows you to accept command parameters in the
+ Execute and CanExecute callback methods.
+
+ The type of the command parameter.
+ If you are using this class in WPF4.5 or above, you need to use the
+ GalaSoft.MvvmLight.CommandWpf namespace (instead of GalaSoft.MvvmLight.Command).
+ This will enable (or restore) the CommandManager class which handles
+ automatic enabling/disabling of controls based on the CanExecute delegate.
+
+
+
+ Initializes a new instance of the RelayCommand class that
+ can always execute.
+
+ The execution logic. IMPORTANT: If the action causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is causing a closure. See
+ http://galasoft.ch/s/mvvmweakaction.
+ If the execute argument is null.
+
+
+
+ Initializes a new instance of the RelayCommand class.
+
+ The execution logic. IMPORTANT: If the action causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ The execution status logic. IMPORTANT: If the func causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is causing a closure. See
+ http://galasoft.ch/s/mvvmweakaction.
+ If the execute argument is null.
+
+
+
+ Occurs when changes occur that affect whether the command should execute.
+
+
+
+
+ Raises the event.
+
+
+
+
+ Defines the method that determines whether the command can execute in its current state.
+
+ Data used by the command. If the command does not require data
+ to be passed, this object can be set to a null reference
+ true if this command can be executed; otherwise, false.
+
+
+
+ Defines the method to be called when the command is invoked.
+
+ Data used by the command. If the command does not require data
+ to be passed, this object can be set to a null reference
+
+
+
+ Helper class for platform detection.
+
+
+
+
+ Helper class used when an async method is required,
+ but the context is synchronous.
+
+
+
+
+ Gets the empty task.
+
+
+
+
+ Helper class for platform and feature detection.
+
+
+
+
+ This interface is meant for the class and can be
+ useful if you store multiple WeakAction{T} instances but don't know in advance
+ what type T represents.
+
+
+
+
+ The target of the WeakAction.
+
+
+
+
+ Executes an action.
+
+ A parameter passed as an object,
+ to be casted to the appropriate type.
+
+
+
+ Deletes all references, which notifies the cleanup method
+ that this entry must be deleted.
+
+
+
+
+ This interface is meant for the class and can be
+ useful if you store multiple WeakFunc{T} instances but don't know in advance
+ what type T represents.
+
+
+
+
+ Executes a Func and returns the result.
+
+ A parameter passed as an object,
+ to be casted to the appropriate type.
+ The result of the operation.
+
+
+
+ Stores an without causing a hard reference
+ to be created to the Action's owner. The owner can be garbage collected at any time.
+
+
+
+
+ Gets or sets the corresponding to this WeakAction's
+ method passed in the constructor.
+
+
+
+
+ Gets the name of the method that this WeakAction represents.
+
+
+
+
+ Gets or sets a WeakReference to this WeakAction's action's target.
+ This is not necessarily the same as
+ , for example if the
+ method is anonymous.
+
+
+
+
+ Saves the as a hard reference. This is
+ used in relation with this instance's constructor and only if
+ the constructor's keepTargetAlive parameter is true.
+
+
+
+
+ Gets or sets a WeakReference to the target passed when constructing
+ the WeakAction. This is not necessarily the same as
+ , for example if the
+ method is anonymous.
+
+
+
+
+ Gets a value indicating whether the WeakAction is static or not.
+
+
+
+
+ Initializes an empty instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The action that will be associated to this instance.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Initializes a new instance of the class.
+
+ The action's owner.
+ The action that will be associated to this instance.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Gets a value indicating whether the Action's owner is still alive, or if it was collected
+ by the Garbage Collector already.
+
+
+
+
+ Gets the Action's owner. This object is stored as a
+ .
+
+
+
+
+ The target of the weak reference.
+
+
+
+
+ Executes the action. This only happens if the action's owner
+ is still alive.
+
+
+
+
+ Sets the reference that this instance stores to null.
+
+
+
+
+ Stores an Action without causing a hard reference
+ to be created to the Action's owner. The owner can be garbage collected at any time.
+
+ The type of the Action's parameter.
+
+
+
+ Gets the name of the method that this WeakAction represents.
+
+
+
+
+ Gets a value indicating whether the Action's owner is still alive, or if it was collected
+ by the Garbage Collector already.
+
+
+
+
+ Initializes a new instance of the WeakAction class.
+
+ The action that will be associated to this instance.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Initializes a new instance of the WeakAction class.
+
+ The action's owner.
+ The action that will be associated to this instance.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Executes the action. This only happens if the action's owner
+ is still alive. The action's parameter is set to default(T).
+
+
+
+
+ Executes the action. This only happens if the action's owner
+ is still alive.
+
+ A parameter to be passed to the action.
+
+
+
+ Executes the action with a parameter of type object. This parameter
+ will be casted to T. This method implements
+ and can be useful if you store multiple WeakAction{T} instances but don't know in advance
+ what type T represents.
+
+ The parameter that will be passed to the action after
+ being casted to T.
+
+
+
+ Sets all the actions that this WeakAction contains to null,
+ which is a signal for containing objects that this WeakAction
+ should be deleted.
+
+
+
+
+ Stores a Func<T> without causing a hard reference
+ to be created to the Func's owner. The owner can be garbage collected at any time.
+
+ The type of the result of the Func that will be stored
+ by this weak reference.
+
+
+
+ Gets or sets the corresponding to this WeakFunc's
+ method passed in the constructor.
+
+
+
+
+ Get a value indicating whether the WeakFunc is static or not.
+
+
+
+
+ Gets the name of the method that this WeakFunc represents.
+
+
+
+
+ Gets or sets a WeakReference to this WeakFunc's action's target.
+ This is not necessarily the same as
+ , for example if the
+ method is anonymous.
+
+
+
+
+ Saves the as a hard reference. This is
+ used in relation with this instance's constructor and only if
+ the constructor's keepTargetAlive parameter is true.
+
+
+
+
+ Gets or sets a WeakReference to the target passed when constructing
+ the WeakFunc. This is not necessarily the same as
+ , for example if the
+ method is anonymous.
+
+
+
+
+ Initializes an empty instance of the WeakFunc class.
+
+
+
+
+ Initializes a new instance of the WeakFunc class.
+
+ The Func that will be associated to this instance.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Initializes a new instance of the WeakFunc class.
+
+ The Func's owner.
+ The Func that will be associated to this instance.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Gets a value indicating whether the Func's owner is still alive, or if it was collected
+ by the Garbage Collector already.
+
+
+
+
+ Gets the Func's owner. This object is stored as a
+ .
+
+
+
+
+ Gets the owner of the Func that was passed as parameter.
+ This is not necessarily the same as
+ , for example if the
+ method is anonymous.
+
+
+
+
+ Executes the action. This only happens if the Func's owner
+ is still alive.
+
+ The result of the Func stored as reference.
+
+
+
+ Sets the reference that this instance stores to null.
+
+
+
+
+ Stores an Func without causing a hard reference
+ to be created to the Func's owner. The owner can be garbage collected at any time.
+
+ The type of the Func's parameter.
+ The type of the Func's return value.
+
+
+
+ Gets or sets the name of the method that this WeakFunc represents.
+
+
+
+
+ Gets a value indicating whether the Func's owner is still alive, or if it was collected
+ by the Garbage Collector already.
+
+
+
+
+ Initializes a new instance of the WeakFunc class.
+
+ The Func that will be associated to this instance.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Initializes a new instance of the WeakFunc class.
+
+ The Func's owner.
+ The Func that will be associated to this instance.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Executes the Func. This only happens if the Func's owner
+ is still alive. The Func's parameter is set to default(T).
+
+ The result of the Func stored as reference.
+
+
+
+ Executes the Func. This only happens if the Func's owner
+ is still alive.
+
+ A parameter to be passed to the action.
+ The result of the Func stored as reference.
+
+
+
+ Executes the Func with a parameter of type object. This parameter
+ will be casted to T. This method implements
+ and can be useful if you store multiple WeakFunc{T} instances but don't know in advance
+ what type T represents.
+
+ The parameter that will be passed to the Func after
+ being casted to T.
+ The result of the execution as object, to be casted to T.
+
+
+
+ Sets all the funcs that this WeakFunc contains to null,
+ which is a signal for containing objects that this WeakFunc
+ should be deleted.
+
+
+
+
+ Defines a common interface for classes that should be cleaned up,
+ but without the implications that IDisposable presupposes. An instance
+ implementing ICleanup can be cleaned up without being
+ disposed and garbage collected.
+
+
+
+
+ Cleans up the instance, for example by saving its state,
+ removing resources, etc...
+
+
+
+
+ Passes a generic value (Content) to a recipient.
+
+ The type of the Content property.
+
+
+
+ Initializes a new instance of the GenericMessage class.
+
+ The message content.
+
+
+
+ Initializes a new instance of the GenericMessage class.
+
+ The message's sender.
+ The message content.
+
+
+
+ Initializes a new instance of the GenericMessage class.
+
+ The message's sender.
+ The message's intended target. This parameter can be used
+ to give an indication as to whom the message was intended for. Of course
+ this is only an indication, amd may be null.
+ The message content.
+
+
+
+ Gets or sets the message's content.
+
+
+
+
+ The Messenger is a class allowing objects to exchange messages.
+
+
+
+
+ Registers a recipient for a type of message TMessage. The action
+ parameter will be executed when a corresponding message is sent.
+ Registering a recipient does not create a hard reference to it,
+ so if this recipient is deleted, no memory leak is caused.
+
+ The type of message that the recipient registers
+ for.
+ The recipient that will receive the messages.
+ The action that will be executed when a message
+ of type TMessage is sent. IMPORTANT: Note that closures are not supported at the moment
+ due to the use of WeakActions (see http://stackoverflow.com/questions/25730530/).
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Registers a recipient for a type of message TMessage.
+ The action parameter will be executed when a corresponding
+ message is sent. See the receiveDerivedMessagesToo parameter
+ for details on how messages deriving from TMessage (or, if TMessage is an interface,
+ messages implementing TMessage) can be received too.
+ Registering a recipient does not create a hard reference to it,
+ so if this recipient is deleted, no memory leak is caused.
+
+ The type of message that the recipient registers
+ for.
+ The recipient that will receive the messages.
+ A token for a messaging channel. If a recipient registers
+ using a token, and a sender sends a message using the same token, then this
+ message will be delivered to the recipient. Other recipients who did not
+ use a token when registering (or who used a different token) will not
+ get the message. Similarly, messages sent without any token, or with a different
+ token, will not be delivered to that recipient.
+ The action that will be executed when a message
+ of type TMessage is sent.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Registers a recipient for a type of message TMessage.
+ The action parameter will be executed when a corresponding
+ message is sent. See the receiveDerivedMessagesToo parameter
+ for details on how messages deriving from TMessage (or, if TMessage is an interface,
+ messages implementing TMessage) can be received too.
+ Registering a recipient does not create a hard reference to it,
+ so if this recipient is deleted, no memory leak is caused.
+
+ The type of message that the recipient registers
+ for.
+ The recipient that will receive the messages.
+ A token for a messaging channel. If a recipient registers
+ using a token, and a sender sends a message using the same token, then this
+ message will be delivered to the recipient. Other recipients who did not
+ use a token when registering (or who used a different token) will not
+ get the message. Similarly, messages sent without any token, or with a different
+ token, will not be delivered to that recipient.
+ If true, message types deriving from
+ TMessage will also be transmitted to the recipient. For example, if a SendOrderMessage
+ and an ExecuteOrderMessage derive from OrderMessage, registering for OrderMessage
+ and setting receiveDerivedMessagesToo to true will send SendOrderMessage
+ and ExecuteOrderMessage to the recipient that registered.
+ Also, if TMessage is an interface, message types implementing TMessage will also be
+ transmitted to the recipient. For example, if a SendOrderMessage
+ and an ExecuteOrderMessage implement IOrderMessage, registering for IOrderMessage
+ and setting receiveDerivedMessagesToo to true will send SendOrderMessage
+ and ExecuteOrderMessage to the recipient that registered.
+
+ The action that will be executed when a message
+ of type TMessage is sent.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Registers a recipient for a type of message TMessage.
+ The action parameter will be executed when a corresponding
+ message is sent. See the receiveDerivedMessagesToo parameter
+ for details on how messages deriving from TMessage (or, if TMessage is an interface,
+ messages implementing TMessage) can be received too.
+ Registering a recipient does not create a hard reference to it,
+ so if this recipient is deleted, no memory leak is caused.
+
+ The type of message that the recipient registers
+ for.
+ The recipient that will receive the messages.
+ If true, message types deriving from
+ TMessage will also be transmitted to the recipient. For example, if a SendOrderMessage
+ and an ExecuteOrderMessage derive from OrderMessage, registering for OrderMessage
+ and setting receiveDerivedMessagesToo to true will send SendOrderMessage
+ and ExecuteOrderMessage to the recipient that registered.
+ Also, if TMessage is an interface, message types implementing TMessage will also be
+ transmitted to the recipient. For example, if a SendOrderMessage
+ and an ExecuteOrderMessage implement IOrderMessage, registering for IOrderMessage
+ and setting receiveDerivedMessagesToo to true will send SendOrderMessage
+ and ExecuteOrderMessage to the recipient that registered.
+
+ The action that will be executed when a message
+ of type TMessage is sent.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Sends a message to registered recipients. The message will
+ reach all recipients that registered for this message type
+ using one of the Register methods.
+
+ The type of message that will be sent.
+ The message to send to registered recipients.
+
+
+
+ Sends a message to registered recipients. The message will
+ reach only recipients that registered for this message type
+ using one of the Register methods, and that are
+ of the targetType.
+
+ The type of message that will be sent.
+ The type of recipients that will receive
+ the message. The message won't be sent to recipients of another type.
+ The message to send to registered recipients.
+
+
+
+ Sends a message to registered recipients. The message will
+ reach only recipients that registered for this message type
+ using one of the Register methods, and that are
+ of the targetType.
+
+ The type of message that will be sent.
+ The message to send to registered recipients.
+ A token for a messaging channel. If a recipient registers
+ using a token, and a sender sends a message using the same token, then this
+ message will be delivered to the recipient. Other recipients who did not
+ use a token when registering (or who used a different token) will not
+ get the message. Similarly, messages sent without any token, or with a different
+ token, will not be delivered to that recipient.
+
+
+
+ Unregisters a messager recipient completely. After this method
+ is executed, the recipient will not receive any messages anymore.
+
+ The recipient that must be unregistered.
+
+
+
+ Unregisters a message recipient for a given type of messages only.
+ After this method is executed, the recipient will not receive messages
+ of type TMessage anymore, but will still receive other message types (if it
+ registered for them previously).
+
+ The type of messages that the recipient wants
+ to unregister from.
+ The recipient that must be unregistered.
+
+
+
+ Unregisters a message recipient for a given type of messages only and for a given token.
+ After this method is executed, the recipient will not receive messages
+ of type TMessage anymore with the given token, but will still receive other message types
+ or messages with other tokens (if it registered for them previously).
+
+ The recipient that must be unregistered.
+ The token for which the recipient must be unregistered.
+ The type of messages that the recipient wants
+ to unregister from.
+
+
+
+ Unregisters a message recipient for a given type of messages and for
+ a given action. Other message types will still be transmitted to the
+ recipient (if it registered for them previously). Other actions that have
+ been registered for the message type TMessage and for the given recipient (if
+ available) will also remain available.
+
+ The type of messages that the recipient wants
+ to unregister from.
+ The recipient that must be unregistered.
+ The action that must be unregistered for
+ the recipient and for the message type TMessage.
+
+
+
+ Unregisters a message recipient for a given type of messages, for
+ a given action and a given token. Other message types will still be transmitted to the
+ recipient (if it registered for them previously). Other actions that have
+ been registered for the message type TMessage, for the given recipient and other tokens (if
+ available) will also remain available.
+
+ The type of messages that the recipient wants
+ to unregister from.
+ The recipient that must be unregistered.
+ The token for which the recipient must be unregistered.
+ The action that must be unregistered for
+ the recipient and for the message type TMessage.
+
+
+
+ Base class for all messages broadcasted by the Messenger.
+ You can create your own message types by extending this class.
+
+
+
+
+ Initializes a new instance of the MessageBase class.
+
+
+
+
+ Initializes a new instance of the MessageBase class.
+
+ The message's original sender.
+
+
+
+ Initializes a new instance of the MessageBase class.
+
+ The message's original sender.
+ The message's intended target. This parameter can be used
+ to give an indication as to whom the message was intended for. Of course
+ this is only an indication, amd may be null.
+
+
+
+ Gets or sets the message's sender.
+
+
+
+
+ Gets or sets the message's intended target. This property can be used
+ to give an indication as to whom the message was intended for. Of course
+ this is only an indication, amd may be null.
+
+
+
+
+ The Messenger is a class allowing objects to exchange messages.
+
+
+
+
+ Gets the Messenger's default instance, allowing
+ to register and send messages in a static manner.
+
+
+
+
+ Registers a recipient for a type of message TMessage. The action
+ parameter will be executed when a corresponding message is sent.
+ Registering a recipient does not create a hard reference to it,
+ so if this recipient is deleted, no memory leak is caused.
+
+ The type of message that the recipient registers
+ for.
+ The recipient that will receive the messages.
+ The action that will be executed when a message
+ of type TMessage is sent. IMPORTANT: If the action causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Registers a recipient for a type of message TMessage.
+ The action parameter will be executed when a corresponding
+ message is sent. See the receiveDerivedMessagesToo parameter
+ for details on how messages deriving from TMessage (or, if TMessage is an interface,
+ messages implementing TMessage) can be received too.
+ Registering a recipient does not create a hard reference to it,
+ so if this recipient is deleted, no memory leak is caused.
+ However if you use closures and set keepTargetAlive to true, you might
+ cause a memory leak if you don't call when you are cleaning up.
+
+ The type of message that the recipient registers
+ for.
+ The recipient that will receive the messages.
+ A token for a messaging channel. If a recipient registers
+ using a token, and a sender sends a message using the same token, then this
+ message will be delivered to the recipient. Other recipients who did not
+ use a token when registering (or who used a different token) will not
+ get the message. Similarly, messages sent without any token, or with a different
+ token, will not be delivered to that recipient.
+ The action that will be executed when a message
+ of type TMessage is sent. IMPORTANT: If the action causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Registers a recipient for a type of message TMessage.
+ The action parameter will be executed when a corresponding
+ message is sent. See the receiveDerivedMessagesToo parameter
+ for details on how messages deriving from TMessage (or, if TMessage is an interface,
+ messages implementing TMessage) can be received too.
+ Registering a recipient does not create a hard reference to it,
+ so if this recipient is deleted, no memory leak is caused.
+
+ The type of message that the recipient registers
+ for.
+ The recipient that will receive the messages.
+ A token for a messaging channel. If a recipient registers
+ using a token, and a sender sends a message using the same token, then this
+ message will be delivered to the recipient. Other recipients who did not
+ use a token when registering (or who used a different token) will not
+ get the message. Similarly, messages sent without any token, or with a different
+ token, will not be delivered to that recipient.
+ If true, message types deriving from
+ TMessage will also be transmitted to the recipient. For example, if a SendOrderMessage
+ and an ExecuteOrderMessage derive from OrderMessage, registering for OrderMessage
+ and setting receiveDerivedMessagesToo to true will send SendOrderMessage
+ and ExecuteOrderMessage to the recipient that registered.
+ Also, if TMessage is an interface, message types implementing TMessage will also be
+ transmitted to the recipient. For example, if a SendOrderMessage
+ and an ExecuteOrderMessage implement IOrderMessage, registering for IOrderMessage
+ and setting receiveDerivedMessagesToo to true will send SendOrderMessage
+ and ExecuteOrderMessage to the recipient that registered.
+
+ The action that will be executed when a message
+ of type TMessage is sent. IMPORTANT: If the action causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Registers a recipient for a type of message TMessage.
+ The action parameter will be executed when a corresponding
+ message is sent. See the receiveDerivedMessagesToo parameter
+ for details on how messages deriving from TMessage (or, if TMessage is an interface,
+ messages implementing TMessage) can be received too.
+ Registering a recipient does not create a hard reference to it,
+ so if this recipient is deleted, no memory leak is caused.
+
+ The type of message that the recipient registers
+ for.
+ The recipient that will receive the messages.
+ If true, message types deriving from
+ TMessage will also be transmitted to the recipient. For example, if a SendOrderMessage
+ and an ExecuteOrderMessage derive from OrderMessage, registering for OrderMessage
+ and setting receiveDerivedMessagesToo to true will send SendOrderMessage
+ and ExecuteOrderMessage to the recipient that registered.
+ Also, if TMessage is an interface, message types implementing TMessage will also be
+ transmitted to the recipient. For example, if a SendOrderMessage
+ and an ExecuteOrderMessage implement IOrderMessage, registering for IOrderMessage
+ and setting receiveDerivedMessagesToo to true will send SendOrderMessage
+ and ExecuteOrderMessage to the recipient that registered.
+
+ The action that will be executed when a message
+ of type TMessage is sent. IMPORTANT: If the action causes a closure,
+ you must set keepTargetAlive to true to avoid side effects.
+ If true, the target of the Action will
+ be kept as a hard reference, which might cause a memory leak. You should only set this
+ parameter to true if the action is using closures. See
+ http://galasoft.ch/s/mvvmweakaction.
+
+
+
+ Sends a message to registered recipients. The message will
+ reach all recipients that registered for this message type
+ using one of the Register methods.
+
+ The type of message that will be sent.
+ The message to send to registered recipients.
+
+
+
+ Sends a message to registered recipients. The message will
+ reach only recipients that registered for this message type
+ using one of the Register methods, and that are
+ of the targetType.
+
+ The type of message that will be sent.
+ The type of recipients that will receive
+ the message. The message won't be sent to recipients of another type.
+ The message to send to registered recipients.
+
+
+
+ Sends a message to registered recipients. The message will
+ reach only recipients that registered for this message type
+ using one of the Register methods, and that are
+ of the targetType.
+
+ The type of message that will be sent.
+ The message to send to registered recipients.
+ A token for a messaging channel. If a recipient registers
+ using a token, and a sender sends a message using the same token, then this
+ message will be delivered to the recipient. Other recipients who did not
+ use a token when registering (or who used a different token) will not
+ get the message. Similarly, messages sent without any token, or with a different
+ token, will not be delivered to that recipient.
+
+
+
+ Unregisters a messager recipient completely. After this method
+ is executed, the recipient will not receive any messages anymore.
+
+ The recipient that must be unregistered.
+
+
+
+ Unregisters a message recipient for a given type of messages only.
+ After this method is executed, the recipient will not receive messages
+ of type TMessage anymore, but will still receive other message types (if it
+ registered for them previously).
+
+ The recipient that must be unregistered.
+ The type of messages that the recipient wants
+ to unregister from.
+
+
+
+ Unregisters a message recipient for a given type of messages only and for a given token.
+ After this method is executed, the recipient will not receive messages
+ of type TMessage anymore with the given token, but will still receive other message types
+ or messages with other tokens (if it registered for them previously).
+
+ The recipient that must be unregistered.
+ The token for which the recipient must be unregistered.
+ The type of messages that the recipient wants
+ to unregister from.
+
+
+
+ Unregisters a message recipient for a given type of messages and for
+ a given action. Other message types will still be transmitted to the
+ recipient (if it registered for them previously). Other actions that have
+ been registered for the message type TMessage and for the given recipient (if
+ available) will also remain available.
+
+ The type of messages that the recipient wants
+ to unregister from.
+ The recipient that must be unregistered.
+ The action that must be unregistered for
+ the recipient and for the message type TMessage.
+
+
+
+ Unregisters a message recipient for a given type of messages, for
+ a given action and a given token. Other message types will still be transmitted to the
+ recipient (if it registered for them previously). Other actions that have
+ been registered for the message type TMessage, for the given recipient and other tokens (if
+ available) will also remain available.
+
+ The type of messages that the recipient wants
+ to unregister from.
+ The recipient that must be unregistered.
+ The token for which the recipient must be unregistered.
+ The action that must be unregistered for
+ the recipient and for the message type TMessage.
+
+
+
+ Provides a way to override the Messenger.Default instance with
+ a custom instance, for example for unit testing purposes.
+
+ The instance that will be used as Messenger.Default.
+
+
+
+ Sets the Messenger's default (static) instance to null.
+
+
+
+
+ Provides a non-static access to the static method.
+ Sets the Messenger's default (static) instance to null.
+
+
+
+
+ Notifies the Messenger that the lists of recipients should
+ be scanned and cleaned up.
+ Since recipients are stored as ,
+ recipients can be garbage collected even though the Messenger keeps
+ them in a list. During the cleanup operation, all "dead"
+ recipients are removed from the lists. Since this operation
+ can take a moment, it is only executed when the application is
+ idle. For this reason, a user of the Messenger class should use
+ instead of forcing one with the
+ method.
+
+
+
+
+ Scans the recipients' lists for "dead" instances and removes them.
+ Since recipients are stored as ,
+ recipients can be garbage collected even though the Messenger keeps
+ them in a list. During the cleanup operation, all "dead"
+ recipients are removed from the lists. Since this operation
+ can take a moment, it is only executed when the application is
+ idle. For this reason, a user of the Messenger class should use
+ instead of forcing one with the
+ method.
+
+
+
+
+ Passes a string message (Notification) to a recipient.
+ Typically, notifications are defined as unique strings in a static class. To define
+ a unique string, you can use Guid.NewGuid().ToString() or any other unique
+ identifier.
+
+
+
+
+ Initializes a new instance of the NotificationMessage class.
+
+ A string containing any arbitrary message to be
+ passed to recipient(s)
+
+
+
+ Initializes a new instance of the NotificationMessage class.
+
+ The message's sender.
+ A string containing any arbitrary message to be
+ passed to recipient(s)
+
+
+
+ Initializes a new instance of the NotificationMessage class.
+
+ The message's sender.
+ The message's intended target. This parameter can be used
+ to give an indication as to whom the message was intended for. Of course
+ this is only an indication, amd may be null.
+ A string containing any arbitrary message to be
+ passed to recipient(s)
+
+
+
+ Gets a string containing any arbitrary message to be
+ passed to recipient(s).
+
+
+
+
+ Provides a message class with a built-in callback. When the recipient
+ is done processing the message, it can execute the callback to
+ notify the sender that it is done. Use the
+ method to execute the callback.
+
+
+
+
+ Initializes a new instance of the
+ class.
+
+ An arbitrary string that will be
+ carried by the message.
+ The callback method that can be executed
+ by the recipient to notify the sender that the message has been
+ processed.
+
+
+
+ Initializes a new instance of the
+ class.
+
+ The message's sender.
+ An arbitrary string that will be
+ carried by the message.
+ The callback method that can be executed
+ by the recipient to notify the sender that the message has been
+ processed.
+
+
+
+ Initializes a new instance of the
+ class.
+
+ The message's sender.
+ The message's intended target. This parameter can be used
+ to give an indication as to whom the message was intended for. Of course
+ this is only an indication, amd may be null.
+ An arbitrary string that will be
+ carried by the message.
+ The callback method that can be executed
+ by the recipient to notify the sender that the message has been
+ processed.
+
+
+
+ Executes the callback that was provided with the message.
+
+
+
+
+ Provides a message class with a built-in callback. When the recipient
+ is done processing the message, it can execute the callback to
+ notify the sender that it is done. Use the
+ method to execute the callback. The callback method has one parameter.
+ .
+
+ The type of the callback method's
+ only parameter.
+
+
+
+ Initializes a new instance of the
+ class.
+
+ An arbitrary string that will be
+ carried by the message.
+ The callback method that can be executed
+ by the recipient to notify the sender that the message has been
+ processed.
+
+
+
+ Initializes a new instance of the
+ class.
+
+ The message's sender.
+ An arbitrary string that will be
+ carried by the message.
+ The callback method that can be executed
+ by the recipient to notify the sender that the message has been
+ processed.
+
+
+
+ Initializes a new instance of the
+ class.
+
+ The message's sender.
+ The message's intended target. This parameter can be used
+ to give an indication as to whom the message was intended for. Of course
+ this is only an indication, amd may be null.
+ An arbitrary string that will be
+ carried by the message.
+ The callback method that can be executed
+ by the recipient to notify the sender that the message has been
+ processed.
+
+
+
+ Executes the callback that was provided with the message.
+
+ A parameter requested by the message's
+ sender and providing additional information on the recipient's
+ state.
+
+
+
+ Passes a string message (Notification) and a generic value (Content) to a recipient.
+
+ The type of the Content property.
+
+
+
+ Initializes a new instance of the NotificationMessage class.
+
+ A value to be passed to recipient(s).
+ A string containing any arbitrary message to be
+ passed to recipient(s)
+
+
+
+ Initializes a new instance of the NotificationMessage class.
+
+ The message's sender.
+ A value to be passed to recipient(s).
+ A string containing any arbitrary message to be
+ passed to recipient(s)
+
+
+
+ Initializes a new instance of the NotificationMessage class.
+
+ The message's sender.
+ The message's intended target. This parameter can be used
+ to give an indication as to whom the message was intended for. Of course
+ this is only an indication, amd may be null.
+ A value to be passed to recipient(s).
+ A string containing any arbitrary message to be
+ passed to recipient(s)
+
+
+
+ Gets a string containing any arbitrary message to be
+ passed to recipient(s).
+
+
+
+
+ Provides a message class with a built-in callback. When the recipient
+ is done processing the message, it can execute the callback to
+ notify the sender that it is done. Use the
+ method to execute the callback. The callback method has one parameter.
+ and
+ .
+
+
+
+
+ Initializes a new instance of the class.
+
+ An arbitrary string that will be
+ carried by the message.
+ The callback method that can be executed
+ by the recipient to notify the sender that the message has been
+ processed.
+
+
+
+ Initializes a new instance of the class.
+
+ The message's sender.
+ An arbitrary string that will be
+ carried by the message.
+ The callback method that can be executed
+ by the recipient to notify the sender that the message has been
+ processed.
+
+
+
+ Initializes a new instance of the class.
+
+ The message's sender.
+ The message's intended target. This parameter can be used
+ to give an indication as to whom the message was intended for. Of course
+ this is only an indication, amd may be null.
+ An arbitrary string that will be
+ carried by the message.
+ The callback method that can be executed
+ by the recipient to notify the sender that the message has been
+ processed.
+
+
+
+ Executes the callback that was provided with the message with an
+ arbitrary number of parameters.
+
+ A number of parameters that will
+ be passed to the callback method.
+ The object returned by the callback method.
+
+
+
+ Passes a string property name (PropertyName) and a generic value
+ ( and ) to a recipient.
+ This message type can be used to propagate a PropertyChanged event to
+ a recipient using the messenging system.
+
+ The type of the OldValue and NewValue property.
+
+
+
+ Initializes a new instance of the class.
+
+ The message's sender.
+ The property's value before the change occurred.
+ The property's value after the change occurred.
+ The name of the property that changed.
+
+
+
+ Initializes a new instance of the class.
+
+ The property's value before the change occurred.
+ The property's value after the change occurred.
+ The name of the property that changed.
+
+
+
+ Initializes a new instance of the class.
+
+ The message's sender.
+ The message's intended target. This parameter can be used
+ to give an indication as to whom the message was intended for. Of course
+ this is only an indication, amd may be null.
+ The property's value before the change occurred.
+ The property's value after the change occurred.
+ The name of the property that changed.
+
+
+
+ Gets the value that the property has after the change.
+
+
+
+
+ Gets the value that the property had before the change.
+
+
+
+
+ Basis class for the class. This
+ class allows a recipient to register for all PropertyChangedMessages without
+ having to specify the type T.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The message's sender.
+ The name of the property that changed.
+
+
+
+ Initializes a new instance of the class.
+
+ The message's sender.
+ The message's intended target. This parameter can be used
+ to give an indication as to whom the message was intended for. Of course
+ this is only an indication, amd may be null.
+ The name of the property that changed.
+
+
+
+ Initializes a new instance of the class.
+
+ The name of the property that changed.
+
+
+
+ Gets or sets the name of the property that changed.
+
+
+
+
+ A base class for objects of which the properties must be observable.
+
+
+
+
+ Occurs after a property value changes.
+
+
+
+
+ Provides access to the PropertyChanged event handler to derived classes.
+
+
+
+
+ Verifies that a property name exists in this ViewModel. This method
+ can be called before the property is used, for instance before
+ calling RaisePropertyChanged. It avoids errors when a property name
+ is changed but some places are missed.
+
+ This method is only active in DEBUG mode.
+ The name of the property that will be
+ checked.
+
+
+
+ Raises the PropertyChanged event if needed.
+
+ If the propertyName parameter
+ does not correspond to an existing property on the current class, an
+ exception is thrown in DEBUG configuration only.
+ (optional) The name of the property that
+ changed.
+
+
+
+ Raises the PropertyChanged event if needed.
+
+ The type of the property that
+ changed.
+ An expression identifying the property
+ that changed.
+
+
+
+ Extracts the name of a property from an expression.
+
+ The type of the property.
+ An expression returning the property's name.
+ The name of the property returned by the expression.
+ If the expression is null.
+ If the expression does not represent a property.
+
+
+
+ Assigns a new value to the property. Then, raises the
+ PropertyChanged event if needed.
+
+ The type of the property that
+ changed.
+ An expression identifying the property
+ that changed.
+ The field storing the property's value.
+ The property's value after the change
+ occurred.
+ True if the PropertyChanged event has been raised,
+ false otherwise. The event is not raised if the old
+ value is equal to the new value.
+
+
+
+ Assigns a new value to the property. Then, raises the
+ PropertyChanged event if needed.
+
+ The type of the property that
+ changed.
+ The name of the property that
+ changed.
+ The field storing the property's value.
+ The property's value after the change
+ occurred.
+ True if the PropertyChanged event has been raised,
+ false otherwise. The event is not raised if the old
+ value is equal to the new value.
+
+
+
+ Assigns a new value to the property. Then, raises the
+ PropertyChanged event if needed.
+
+ The type of the property that
+ changed.
+ The field storing the property's value.
+ The property's value after the change
+ occurred.
+ (optional) The name of the property that
+ changed.
+ True if the PropertyChanged event has been raised,
+ false otherwise. The event is not raised if the old
+ value is equal to the new value.
+
+
+
+ A base class for the ViewModel classes in the MVVM pattern.
+
+
+
+
+ Initializes a new instance of the ViewModelBase class.
+
+
+
+
+ Initializes a new instance of the ViewModelBase class.
+
+ An instance of a
+ used to broadcast messages to other objects. If null, this class
+ will attempt to broadcast using the Messenger's default
+ instance.
+
+
+
+ Gets a value indicating whether the control is in design mode
+ (running under Blend or Visual Studio).
+
+
+
+
+ Gets a value indicating whether the control is in design mode
+ (running in Blend or Visual Studio).
+
+
+
+
+ Gets or sets an instance of a used to
+ broadcast messages to other objects. If null, this class will
+ attempt to broadcast using the Messenger's default instance.
+
+
+
+
+ Unregisters this instance from the Messenger class.
+ To cleanup additional resources, override this method, clean
+ up and then call base.Cleanup().
+
+
+
+
+ Broadcasts a PropertyChangedMessage using either the instance of
+ the Messenger that was passed to this class (if available)
+ or the Messenger's default instance.
+
+ The type of the property that
+ changed.
+ The value of the property before it
+ changed.
+ The value of the property after it
+ changed.
+ The name of the property that
+ changed.
+
+
+
+ Raises the PropertyChanged event if needed, and broadcasts a
+ PropertyChangedMessage using the Messenger instance (or the
+ static default instance if no Messenger instance is available).
+
+ The type of the property that
+ changed.
+ The name of the property that
+ changed.
+ The property's value before the change
+ occurred.
+ The property's value after the change
+ occurred.
+ If true, a PropertyChangedMessage will
+ be broadcasted. If false, only the event will be raised.
+ If the propertyName parameter
+ does not correspond to an existing property on the current class, an
+ exception is thrown in DEBUG configuration only.
+
+
+
+ Raises the PropertyChanged event if needed, and broadcasts a
+ PropertyChangedMessage using the Messenger instance (or the
+ static default instance if no Messenger instance is available).
+
+ The type of the property that
+ changed.
+ An expression identifying the property
+ that changed.
+ The property's value before the change
+ occurred.
+ The property's value after the change
+ occurred.
+ If true, a PropertyChangedMessage will
+ be broadcasted. If false, only the event will be raised.
+
+
+
+ Assigns a new value to the property. Then, raises the
+ PropertyChanged event if needed, and broadcasts a
+ PropertyChangedMessage using the Messenger instance (or the
+ static default instance if no Messenger instance is available).
+
+ The type of the property that
+ changed.
+ An expression identifying the property
+ that changed.
+ The field storing the property's value.
+ The property's value after the change
+ occurred.
+ If true, a PropertyChangedMessage will
+ be broadcasted. If false, only the event will be raised.
+ True if the PropertyChanged event was raised, false otherwise.
+
+
+
+ Assigns a new value to the property. Then, raises the
+ PropertyChanged event if needed, and broadcasts a
+ PropertyChangedMessage using the Messenger instance (or the
+ static default instance if no Messenger instance is available).
+
+ The type of the property that
+ changed.
+ The name of the property that
+ changed.
+ The field storing the property's value.
+ The property's value after the change
+ occurred.
+ If true, a PropertyChangedMessage will
+ be broadcasted. If false, only the event will be raised.
+ True if the PropertyChanged event was raised, false otherwise.
+
+
+
+ Assigns a new value to the property. Then, raises the
+ PropertyChanged event if needed, and broadcasts a
+ PropertyChangedMessage using the Messenger instance (or the
+ static default instance if no Messenger instance is available).
+
+ The type of the property that
+ changed.
+ The field storing the property's value.
+ The property's value after the change
+ occurred.
+ If true, a PropertyChangedMessage will
+ be broadcasted. If false, only the event will be raised.
+ (optional) The name of the property that
+ changed.
+ True if the PropertyChanged event was raised, false otherwise.
+
+
+
+ An interface defining how dialogs should
+ be displayed in various frameworks such as Windows,
+ Windows Phone, Android, iOS etc.
+
+
+
+
+ Displays information about an error.
+
+ The message to be shown to the user.
+ The title of the dialog box. This may be null.
+ The text shown in the only button
+ in the dialog box. If left null, the text "OK" will be used.
+ A callback that should be executed after
+ the dialog box is closed by the user.
+ A Task allowing this async method to be awaited.
+
+
+
+ Displays information about an error.
+
+ The exception of which the message must be shown to the user.
+ The title of the dialog box. This may be null.
+ The text shown in the only button
+ in the dialog box. If left null, the text "OK" will be used.
+ A callback that should be executed after
+ the dialog box is closed by the user.
+ A Task allowing this async method to be awaited.
+
+
+
+ Displays information to the user. The dialog box will have only
+ one button with the text "OK".
+
+ The message to be shown to the user.
+ The title of the dialog box. This may be null.
+ A Task allowing this async method to be awaited.
+
+
+
+ Displays information to the user. The dialog box will have only
+ one button.
+
+ The message to be shown to the user.
+ The title of the dialog box. This may be null.
+ The text shown in the only button
+ in the dialog box. If left null, the text "OK" will be used.
+ A callback that should be executed after
+ the dialog box is closed by the user.
+ A Task allowing this async method to be awaited.
+
+
+
+ Displays information to the user. The dialog box will have only
+ one button.
+
+ The message to be shown to the user.
+ The title of the dialog box. This may be null.
+ The text shown in the "confirm" button
+ in the dialog box. If left null, the text "OK" will be used.
+ The text shown in the "cancel" button
+ in the dialog box. If left null, the text "Cancel" will be used.
+ A callback that should be executed after
+ the dialog box is closed by the user. The callback method will get a boolean
+ parameter indicating if the "confirm" button (true) or the "cancel" button
+ (false) was pressed by the user.
+ A Task allowing this async method to be awaited. The task will return
+ true or false depending on the dialog result.
+
+
+
+ Displays information to the user in a simple dialog box. The dialog box will have only
+ one button with the text "OK". This method should be used for debugging purposes.
+
+ The message to be shown to the user.
+ The title of the dialog box. This may be null.
+ A Task allowing this async method to be awaited.
+
+
+
+ An interface defining how navigation between pages should
+ be performed in various frameworks such as Windows,
+ Windows Phone, Android, iOS etc.
+
+
+
+
+ The key corresponding to the currently displayed page.
+
+
+
+
+ If possible, instructs the navigation service
+ to discard the current page and display the previous page
+ on the navigation stack.
+
+
+
+
+ Instructs the navigation service to display a new page
+ corresponding to the given key. Depending on the platforms,
+ the navigation service might have to be configured with a
+ key/page list.
+
+ The key corresponding to the page
+ that should be displayed.
+
+
+
+ Instructs the navigation service to display a new page
+ corresponding to the given key, and passes a parameter
+ to the new page.
+ Depending on the platforms, the navigation service might
+ have to be Configure with a key/page list.
+
+ The key corresponding to the page
+ that should be displayed.
+ The parameter that should be passed
+ to the new page.
+
+
+
diff --git a/Aucma.Scada.UI/bin/Debug/HighWayIot.Common.dll b/Aucma.Scada.UI/bin/Debug/HighWayIot.Common.dll
new file mode 100644
index 00000000..dead5ea8
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/HighWayIot.Common.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/HighWayIot.Common.pdb b/Aucma.Scada.UI/bin/Debug/HighWayIot.Common.pdb
new file mode 100644
index 00000000..46d305e1
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/HighWayIot.Common.pdb differ
diff --git a/Aucma.Scada.UI/bin/Debug/HighWayIot.Log4net.dll b/Aucma.Scada.UI/bin/Debug/HighWayIot.Log4net.dll
new file mode 100644
index 00000000..30bae7e5
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/HighWayIot.Log4net.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/HighWayIot.Log4net.pdb b/Aucma.Scada.UI/bin/Debug/HighWayIot.Log4net.pdb
new file mode 100644
index 00000000..a3ec7c87
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/HighWayIot.Log4net.pdb differ
diff --git a/Aucma.Scada.UI/bin/Debug/HighWayIot.Repository.dll b/Aucma.Scada.UI/bin/Debug/HighWayIot.Repository.dll
new file mode 100644
index 00000000..2ea1c89a
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/HighWayIot.Repository.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/HighWayIot.Repository.dll.config b/Aucma.Scada.UI/bin/Debug/HighWayIot.Repository.dll.config
new file mode 100644
index 00000000..c00df4da
--- /dev/null
+++ b/Aucma.Scada.UI/bin/Debug/HighWayIot.Repository.dll.config
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Aucma.Scada.UI/bin/Debug/HighWayIot.Repository.pdb b/Aucma.Scada.UI/bin/Debug/HighWayIot.Repository.pdb
new file mode 100644
index 00000000..a51058b9
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/HighWayIot.Repository.pdb differ
diff --git a/Aucma.Scada.UI/bin/Debug/Lierda.WPFHelper.dll b/Aucma.Scada.UI/bin/Debug/Lierda.WPFHelper.dll
new file mode 100644
index 00000000..02342d0d
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/Lierda.WPFHelper.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/LogError.html b/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/LogError.html
new file mode 100644
index 00000000..e69de29b
diff --git a/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/LogInfo.txt b/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/LogInfo.txt
new file mode 100644
index 00000000..9ecbef12
--- /dev/null
+++ b/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/LogInfo.txt
@@ -0,0 +1,5 @@
+<-------------->
+־ʱ䣺2023-09-20 09:04:20,896 [1]
+־INFO
+־ݣ˳
+
\ No newline at end of file
diff --git a/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/PlcLog.txt b/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/PlcLog.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/RfidLog.txt b/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/RfidLog.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/SemaphoreLog.txt b/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/SemaphoreLog.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/SqlLog.txt b/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/SqlLog.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/ViewLog.txt b/Aucma.Scada.UI/bin/Debug/Log/2023-09-20/ViewLog.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/Aucma.Scada.UI/bin/Debug/MySql.Data.dll b/Aucma.Scada.UI/bin/Debug/MySql.Data.dll
new file mode 100644
index 00000000..888c220e
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/MySql.Data.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/Newtonsoft.Json.dll b/Aucma.Scada.UI/bin/Debug/Newtonsoft.Json.dll
new file mode 100644
index 00000000..7af125a2
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/Newtonsoft.Json.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/Oracle.ManagedDataAccess.dll b/Aucma.Scada.UI/bin/Debug/Oracle.ManagedDataAccess.dll
new file mode 100644
index 00000000..c408c773
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/Oracle.ManagedDataAccess.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/SqlSugar.dll b/Aucma.Scada.UI/bin/Debug/SqlSugar.dll
new file mode 100644
index 00000000..fcb0e212
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/SqlSugar.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/System.Data.SQLite.dll b/Aucma.Scada.UI/bin/Debug/System.Data.SQLite.dll
new file mode 100644
index 00000000..f68bb537
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/System.Data.SQLite.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/System.Windows.Interactivity.dll b/Aucma.Scada.UI/bin/Debug/System.Windows.Interactivity.dll
new file mode 100644
index 00000000..931c744c
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/System.Windows.Interactivity.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/log4net.dll b/Aucma.Scada.UI/bin/Debug/log4net.dll
new file mode 100644
index 00000000..8646b6fc
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/log4net.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/x64/SQLite.Interop.dll b/Aucma.Scada.UI/bin/Debug/x64/SQLite.Interop.dll
new file mode 100644
index 00000000..20e99178
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/x64/SQLite.Interop.dll differ
diff --git a/Aucma.Scada.UI/bin/Debug/x86/SQLite.Interop.dll b/Aucma.Scada.UI/bin/Debug/x86/SQLite.Interop.dll
new file mode 100644
index 00000000..512eb9d8
Binary files /dev/null and b/Aucma.Scada.UI/bin/Debug/x86/SQLite.Interop.dll differ
diff --git a/Aucma.Scada.UI/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/Aucma.Scada.UI/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs
new file mode 100644
index 00000000..15efebfc
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
diff --git a/Aucma.Scada.UI/obj/Debug/App.baml b/Aucma.Scada.UI/obj/Debug/App.baml
new file mode 100644
index 00000000..62ff22dd
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/App.baml differ
diff --git a/Aucma.Scada.UI/obj/Debug/App.g.cs b/Aucma.Scada.UI/obj/Debug/App.g.cs
new file mode 100644
index 00000000..9ddd2558
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/App.g.cs
@@ -0,0 +1,83 @@
+#pragma checksum "..\..\App.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "B060CCE3C0EB2936A3B2B1DB0D293EE0DA9069BFA1CE2B91373FAA106625D31E"
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+using Aucma.Scada.UI;
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace Aucma.Scada.UI {
+
+
+ ///
+ /// App
+ ///
+ public partial class App : System.Windows.Application {
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+
+ #line 5 "..\..\App.xaml"
+ this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
+
+ #line default
+ #line hidden
+ System.Uri resourceLocater = new System.Uri("/Aucma.Scada.UI;component/app.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\App.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ ///
+ /// Application Entry Point.
+ ///
+ [System.STAThreadAttribute()]
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ public static void Main() {
+ Aucma.Scada.UI.App app = new Aucma.Scada.UI.App();
+ app.InitializeComponent();
+ app.Run();
+ }
+ }
+}
+
diff --git a/Aucma.Scada.UI/obj/Debug/App.g.i.cs b/Aucma.Scada.UI/obj/Debug/App.g.i.cs
new file mode 100644
index 00000000..9ddd2558
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/App.g.i.cs
@@ -0,0 +1,83 @@
+#pragma checksum "..\..\App.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "B060CCE3C0EB2936A3B2B1DB0D293EE0DA9069BFA1CE2B91373FAA106625D31E"
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+using Aucma.Scada.UI;
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace Aucma.Scada.UI {
+
+
+ ///
+ /// App
+ ///
+ public partial class App : System.Windows.Application {
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+
+ #line 5 "..\..\App.xaml"
+ this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
+
+ #line default
+ #line hidden
+ System.Uri resourceLocater = new System.Uri("/Aucma.Scada.UI;component/app.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\App.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ ///
+ /// Application Entry Point.
+ ///
+ [System.STAThreadAttribute()]
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ public static void Main() {
+ Aucma.Scada.UI.App app = new Aucma.Scada.UI.App();
+ app.InitializeComponent();
+ app.Run();
+ }
+ }
+}
+
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.Properties.Resources.resources b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.Properties.Resources.resources
new file mode 100644
index 00000000..6c05a977
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.Properties.Resources.resources differ
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.AssemblyReference.cache b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.AssemblyReference.cache
new file mode 100644
index 00000000..c0823065
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.AssemblyReference.cache differ
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.CopyComplete b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.CopyComplete
new file mode 100644
index 00000000..e69de29b
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.CoreCompileInputs.cache b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.CoreCompileInputs.cache
new file mode 100644
index 00000000..84e3e661
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+2f8a87be1b190a202195a93475a72dddedef6d3f
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.FileListAbsolute.txt b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.FileListAbsolute.txt
new file mode 100644
index 00000000..a30b238b
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.FileListAbsolute.txt
@@ -0,0 +1,50 @@
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\Aucma.Scada.UI.csproj.AssemblyReference.cache
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\Aucma.Scada.UI.exe.config
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\IndexControl.g.cs
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\LogInfoControl.g.cs
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\MainWindow.g.cs
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\RecordControl.g.cs
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\App.g.cs
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\Aucma.Scada.UI_MarkupCompile.cache
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\Aucma.Scada.UI_MarkupCompile.lref
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\Aucma.Scada.UI.exe.config
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\Aucma.Scada.UI.exe
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\Aucma.Scada.UI.pdb
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\CommonServiceLocator.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\GalaSoft.MvvmLight.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\GalaSoft.MvvmLight.Extras.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\GalaSoft.MvvmLight.Platform.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\HighWayIot.Log4net.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\HighWayIot.Repository.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\Lierda.WPFHelper.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\MySql.Data.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\Oracle.ManagedDataAccess.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\SqlSugar.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\System.Data.SQLite.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\System.Windows.Interactivity.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\log4net.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\HighWayIot.Common.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\Newtonsoft.Json.dll
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\HighWayIot.Log4net.pdb
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\HighWayIot.Repository.pdb
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\HighWayIot.Repository.dll.config
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\GalaSoft.MvvmLight.pdb
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\GalaSoft.MvvmLight.xml
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\GalaSoft.MvvmLight.Extras.pdb
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\GalaSoft.MvvmLight.Extras.xml
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\GalaSoft.MvvmLight.Platform.pdb
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\GalaSoft.MvvmLight.Platform.xml
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\bin\Debug\HighWayIot.Common.pdb
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\App.baml
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\IndexControl.baml
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\LogInfoControl.baml
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\MainWindow.baml
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\RecordControl.baml
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\templates\style\resourceStyle.baml
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\Aucma.Scada.UI.g.resources
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\Aucma.Scada.UI.Properties.Resources.resources
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\Aucma.Scada.UI.csproj.GenerateResource.cache
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\Aucma.Scada.UI.csproj.CoreCompileInputs.cache
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\Aucma.Scada.UI.csproj.CopyComplete
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\Aucma.Scada.UI.exe
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\Aucma.Scada.UI.pdb
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.GenerateResource.cache b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.GenerateResource.cache
new file mode 100644
index 00000000..411578c7
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.csproj.GenerateResource.cache differ
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.exe b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.exe
new file mode 100644
index 00000000..d7972bd2
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.exe differ
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.exe.config b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.exe.config
new file mode 100644
index 00000000..ff4c94c5
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.exe.config
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.g.resources b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.g.resources
new file mode 100644
index 00000000..d149a580
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.g.resources differ
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.pdb b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.pdb
new file mode 100644
index 00000000..8aab80fe
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI.pdb differ
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI_Content.g.i.cs b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI_Content.g.i.cs
new file mode 100644
index 00000000..713d3ff0
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI_Content.g.i.cs
@@ -0,0 +1,13 @@
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("icon.png")]
+
+
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI_MarkupCompile.cache b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI_MarkupCompile.cache
new file mode 100644
index 00000000..eadeea09
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI_MarkupCompile.cache
@@ -0,0 +1,20 @@
+Aucma.Scada.UI
+
+
+winexe
+C#
+.cs
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\
+Aucma.Scada.UI
+none
+false
+DEBUG;TRACE
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\App.xaml
+5-641925663
+
+11489784142
+129248000128
+IndexControl.xaml;LogInfoControl.xaml;MainWindow.xaml;RecordControl.xaml;templates\style\resourceStyle.xaml;
+
+False
+
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI_MarkupCompile.i.cache b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI_MarkupCompile.i.cache
new file mode 100644
index 00000000..f58824ad
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI_MarkupCompile.i.cache
@@ -0,0 +1,20 @@
+Aucma.Scada.UI
+
+
+winexe
+C#
+.cs
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\obj\Debug\
+Aucma.Scada.UI
+none
+false
+DEBUG;TRACE
+C:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\App.xaml
+5-641925663
+
+12-264785642
+129248000128
+IndexControl.xaml;LogInfoControl.xaml;MainWindow.xaml;RecordControl.xaml;templates\style\resourceStyle.xaml;
+
+False
+
diff --git a/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI_MarkupCompile.lref b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI_MarkupCompile.lref
new file mode 100644
index 00000000..e708898b
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/Aucma.Scada.UI_MarkupCompile.lref
@@ -0,0 +1,8 @@
+
+FC:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\App.xaml;;
+FC:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\IndexControl.xaml;;
+FC:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\LogInfoControl.xaml;;
+FC:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\MainWindow.xaml;;
+FC:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\RecordControl.xaml;;
+FC:\项目代码\澳柯玛MES项目\HighWayIot\Aucma.Scada.UI\templates\style\resourceStyle.xaml;;
+
diff --git a/Aucma.Scada.UI/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Aucma.Scada.UI/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 00000000..ea7a9705
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/Aucma.Scada.UI/obj/Debug/IndexControl.baml b/Aucma.Scada.UI/obj/Debug/IndexControl.baml
new file mode 100644
index 00000000..802bccda
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/IndexControl.baml differ
diff --git a/Aucma.Scada.UI/obj/Debug/IndexControl.g.cs b/Aucma.Scada.UI/obj/Debug/IndexControl.g.cs
new file mode 100644
index 00000000..c742c338
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/IndexControl.g.cs
@@ -0,0 +1,75 @@
+#pragma checksum "..\..\IndexControl.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "ADD1ADBAD0FB398B7FB338057ED14B39EBB57820AF57D89F87F806226B4A55B3"
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+using Aucma.Scada.UI;
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace Aucma.Scada.UI {
+
+
+ ///
+ /// IndexControl
+ ///
+ public partial class IndexControl : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/Aucma.Scada.UI;component/indexcontrol.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\IndexControl.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+ void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+ this._contentLoaded = true;
+ }
+ }
+}
+
diff --git a/Aucma.Scada.UI/obj/Debug/IndexControl.g.i.cs b/Aucma.Scada.UI/obj/Debug/IndexControl.g.i.cs
new file mode 100644
index 00000000..c742c338
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/IndexControl.g.i.cs
@@ -0,0 +1,75 @@
+#pragma checksum "..\..\IndexControl.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "ADD1ADBAD0FB398B7FB338057ED14B39EBB57820AF57D89F87F806226B4A55B3"
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+using Aucma.Scada.UI;
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace Aucma.Scada.UI {
+
+
+ ///
+ /// IndexControl
+ ///
+ public partial class IndexControl : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/Aucma.Scada.UI;component/indexcontrol.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\IndexControl.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+ void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+ this._contentLoaded = true;
+ }
+ }
+}
+
diff --git a/Aucma.Scada.UI/obj/Debug/LogInfoControl.baml b/Aucma.Scada.UI/obj/Debug/LogInfoControl.baml
new file mode 100644
index 00000000..032852ba
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/LogInfoControl.baml differ
diff --git a/Aucma.Scada.UI/obj/Debug/LogInfoControl.g.cs b/Aucma.Scada.UI/obj/Debug/LogInfoControl.g.cs
new file mode 100644
index 00000000..912661d3
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/LogInfoControl.g.cs
@@ -0,0 +1,89 @@
+#pragma checksum "..\..\LogInfoControl.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "CEDC2EB27D31297DE9891C1613330D83074E9081EEA158C42DE3A188BD9EF8D2"
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+using Aucma.Scada.UI;
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace Aucma.Scada.UI {
+
+
+ ///
+ /// LogInfoControl
+ ///
+ public partial class LogInfoControl : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
+
+
+ #line 10 "..\..\LogInfoControl.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.ListBox listBox;
+
+ #line default
+ #line hidden
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/Aucma.Scada.UI;component/loginfocontrol.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\LogInfoControl.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+ void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+ switch (connectionId)
+ {
+ case 1:
+ this.listBox = ((System.Windows.Controls.ListBox)(target));
+ return;
+ }
+ this._contentLoaded = true;
+ }
+ }
+}
+
diff --git a/Aucma.Scada.UI/obj/Debug/LogInfoControl.g.i.cs b/Aucma.Scada.UI/obj/Debug/LogInfoControl.g.i.cs
new file mode 100644
index 00000000..912661d3
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/LogInfoControl.g.i.cs
@@ -0,0 +1,89 @@
+#pragma checksum "..\..\LogInfoControl.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "CEDC2EB27D31297DE9891C1613330D83074E9081EEA158C42DE3A188BD9EF8D2"
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+using Aucma.Scada.UI;
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace Aucma.Scada.UI {
+
+
+ ///
+ /// LogInfoControl
+ ///
+ public partial class LogInfoControl : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
+
+
+ #line 10 "..\..\LogInfoControl.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.ListBox listBox;
+
+ #line default
+ #line hidden
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/Aucma.Scada.UI;component/loginfocontrol.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\LogInfoControl.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+ void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+ switch (connectionId)
+ {
+ case 1:
+ this.listBox = ((System.Windows.Controls.ListBox)(target));
+ return;
+ }
+ this._contentLoaded = true;
+ }
+ }
+}
+
diff --git a/Aucma.Scada.UI/obj/Debug/MainWindow.baml b/Aucma.Scada.UI/obj/Debug/MainWindow.baml
new file mode 100644
index 00000000..c3d2ca23
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/MainWindow.baml differ
diff --git a/Aucma.Scada.UI/obj/Debug/MainWindow.g.cs b/Aucma.Scada.UI/obj/Debug/MainWindow.g.cs
new file mode 100644
index 00000000..8bd025f3
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/MainWindow.g.cs
@@ -0,0 +1,133 @@
+#pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "98AD6091D3839BE5BD34836FEBD6C4A567A0667996AE65F960BFF73434F15079"
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+using Aucma.Scada.UI;
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace Aucma.Scada.UI {
+
+
+ ///
+ /// MainWindow
+ ///
+ public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+
+
+ #line 38 "..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button inde;
+
+ #line default
+ #line hidden
+
+
+ #line 39 "..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button logInfo;
+
+ #line default
+ #line hidden
+
+
+ #line 40 "..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button record;
+
+ #line default
+ #line hidden
+
+
+ #line 42 "..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button Minimized;
+
+ #line default
+ #line hidden
+
+
+ #line 43 "..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button Exit;
+
+ #line default
+ #line hidden
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/Aucma.Scada.UI;component/mainwindow.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\MainWindow.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+ void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+ switch (connectionId)
+ {
+ case 1:
+ this.inde = ((System.Windows.Controls.Button)(target));
+ return;
+ case 2:
+ this.logInfo = ((System.Windows.Controls.Button)(target));
+ return;
+ case 3:
+ this.record = ((System.Windows.Controls.Button)(target));
+ return;
+ case 4:
+ this.Minimized = ((System.Windows.Controls.Button)(target));
+ return;
+ case 5:
+ this.Exit = ((System.Windows.Controls.Button)(target));
+ return;
+ }
+ this._contentLoaded = true;
+ }
+ }
+}
+
diff --git a/Aucma.Scada.UI/obj/Debug/MainWindow.g.i.cs b/Aucma.Scada.UI/obj/Debug/MainWindow.g.i.cs
new file mode 100644
index 00000000..8bd025f3
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/MainWindow.g.i.cs
@@ -0,0 +1,133 @@
+#pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "98AD6091D3839BE5BD34836FEBD6C4A567A0667996AE65F960BFF73434F15079"
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+using Aucma.Scada.UI;
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace Aucma.Scada.UI {
+
+
+ ///
+ /// MainWindow
+ ///
+ public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+
+
+ #line 38 "..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button inde;
+
+ #line default
+ #line hidden
+
+
+ #line 39 "..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button logInfo;
+
+ #line default
+ #line hidden
+
+
+ #line 40 "..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button record;
+
+ #line default
+ #line hidden
+
+
+ #line 42 "..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button Minimized;
+
+ #line default
+ #line hidden
+
+
+ #line 43 "..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button Exit;
+
+ #line default
+ #line hidden
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/Aucma.Scada.UI;component/mainwindow.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\MainWindow.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+ void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+ switch (connectionId)
+ {
+ case 1:
+ this.inde = ((System.Windows.Controls.Button)(target));
+ return;
+ case 2:
+ this.logInfo = ((System.Windows.Controls.Button)(target));
+ return;
+ case 3:
+ this.record = ((System.Windows.Controls.Button)(target));
+ return;
+ case 4:
+ this.Minimized = ((System.Windows.Controls.Button)(target));
+ return;
+ case 5:
+ this.Exit = ((System.Windows.Controls.Button)(target));
+ return;
+ }
+ this._contentLoaded = true;
+ }
+ }
+}
+
diff --git a/Aucma.Scada.UI/obj/Debug/RecordControl.baml b/Aucma.Scada.UI/obj/Debug/RecordControl.baml
new file mode 100644
index 00000000..ea039f99
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/RecordControl.baml differ
diff --git a/Aucma.Scada.UI/obj/Debug/RecordControl.g.cs b/Aucma.Scada.UI/obj/Debug/RecordControl.g.cs
new file mode 100644
index 00000000..9dafca65
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/RecordControl.g.cs
@@ -0,0 +1,75 @@
+#pragma checksum "..\..\RecordControl.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "757B77B262E5881CE54F124A3ACA7CD1D311F3A854B839C3265BAED89751ECF3"
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+using Aucma.Scada.UI;
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace Aucma.Scada.UI {
+
+
+ ///
+ /// RecordControl
+ ///
+ public partial class RecordControl : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/Aucma.Scada.UI;component/recordcontrol.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\RecordControl.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+ void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+ this._contentLoaded = true;
+ }
+ }
+}
+
diff --git a/Aucma.Scada.UI/obj/Debug/RecordControl.g.i.cs b/Aucma.Scada.UI/obj/Debug/RecordControl.g.i.cs
new file mode 100644
index 00000000..9dafca65
--- /dev/null
+++ b/Aucma.Scada.UI/obj/Debug/RecordControl.g.i.cs
@@ -0,0 +1,75 @@
+#pragma checksum "..\..\RecordControl.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "757B77B262E5881CE54F124A3ACA7CD1D311F3A854B839C3265BAED89751ECF3"
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+using Aucma.Scada.UI;
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace Aucma.Scada.UI {
+
+
+ ///
+ /// RecordControl
+ ///
+ public partial class RecordControl : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/Aucma.Scada.UI;component/recordcontrol.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\RecordControl.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+ void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+ this._contentLoaded = true;
+ }
+ }
+}
+
diff --git a/Aucma.Scada.UI/obj/Debug/templates/style/resourceStyle.baml b/Aucma.Scada.UI/obj/Debug/templates/style/resourceStyle.baml
new file mode 100644
index 00000000..89ab15ad
Binary files /dev/null and b/Aucma.Scada.UI/obj/Debug/templates/style/resourceStyle.baml differ
diff --git a/Aucma.Scada.UI/packages.config b/Aucma.Scada.UI/packages.config
new file mode 100644
index 00000000..f5eb1eb3
--- /dev/null
+++ b/Aucma.Scada.UI/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/Aucma.Scada.UI/templates/icon/Icon.png b/Aucma.Scada.UI/templates/icon/Icon.png
new file mode 100644
index 00000000..15604655
Binary files /dev/null and b/Aucma.Scada.UI/templates/icon/Icon.png differ
diff --git a/Aucma.Scada.UI/templates/style/resourceStyle.xaml b/Aucma.Scada.UI/templates/style/resourceStyle.xaml
new file mode 100644
index 00000000..50a4c44d
--- /dev/null
+++ b/Aucma.Scada.UI/templates/style/resourceStyle.xaml
@@ -0,0 +1,424 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Aucma.Scada.UI/viewModel/LogInfoViewModel.cs b/Aucma.Scada.UI/viewModel/LogInfoViewModel.cs
new file mode 100644
index 00000000..9f93f225
--- /dev/null
+++ b/Aucma.Scada.UI/viewModel/LogInfoViewModel.cs
@@ -0,0 +1,51 @@
+using GalaSoft.MvvmLight;
+using HighWayIot.Log4net;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Aucma.Scada.UI.viewModel
+{
+ public class LogInfoViewModel : ViewModelBase
+ {
+ private LogHelper logHelper = LogHelper.Instance;
+ private IEnumerable listBoxData;
+ ///
+ /// LisBox数据模板
+ ///
+ public IEnumerable ListBoxData
+ {
+ get { return listBoxData; }
+ set { listBoxData = value; RaisePropertyChanged(() => ListBoxData); }
+ }
+
+ private ObservableCollection listItems = new ObservableCollection();
+
+ public LogInfoViewModel()
+ {
+ PrintMessageToListBox("打印日志");
+ }
+
+ ///
+ /// listBox绑定日志
+ ///
+ ///
+ private void PrintMessageToListBox(string message)
+ {
+
+ try
+ {
+ listItems.Add($"{DateTime.Now.ToString("HH:mm:ss")}==>{message}");
+
+ ListBoxData = listItems.OrderByDescending(x => x);
+ }catch(Exception ex)
+ {
+ logHelper.Error("日志数据绑定异常", ex);
+ }
+ }
+ }
+}
diff --git a/Aucma.Scada.UI/viewModel/MainViewModel.cs b/Aucma.Scada.UI/viewModel/MainViewModel.cs
new file mode 100644
index 00000000..37c6b986
--- /dev/null
+++ b/Aucma.Scada.UI/viewModel/MainViewModel.cs
@@ -0,0 +1,188 @@
+using GalaSoft.MvvmLight;
+using GalaSoft.MvvmLight.Command;
+using HighWayIot.Log4net;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace Aucma.Scada.UI.viewModel
+{
+ public class MainViewModel : ViewModelBase
+ {
+ private LogHelper logHelper = LogHelper.Instance;
+ private readonly LogInfoControl logInfoControl = new LogInfoControl();
+ private readonly IndexControl indexControl = new IndexControl();
+ private readonly RecordControl recordControl = new RecordControl();
+
+ public MainViewModel()
+ {
+ //FormControlCommand = new RelayCommand