diff --git a/BPASmartClient.SCADAControl/CustomerControls/TheAPI.xaml.cs b/BPASmartClient.SCADAControl/CustomerControls/TheAPI.xaml.cs
index 03606fab..3dca1094 100644
--- a/BPASmartClient.SCADAControl/CustomerControls/TheAPI.xaml.cs
+++ b/BPASmartClient.SCADAControl/CustomerControls/TheAPI.xaml.cs
@@ -166,6 +166,9 @@ namespace BPASmartClient.SCADAControl.CustomerControls
public void Dispose()
{
timer.Stop();
+ Direction=0;
+ FDataSouce = "";
+ if (IsRun) IsRun = false;
}
#region 属性
@@ -275,7 +278,7 @@ namespace BPASmartClient.SCADAControl.CustomerControls
{
try
{
- if (!string.IsNullOrEmpty(FDataSouce))
+ //if (!string.IsNullOrEmpty(FDataSouce))
{
GenerateData = (string)CSharpConfig.GetInstance().RunCSharp(Code,new object[] { FDataSouce });
Class_DataBus.GetInstance().Dic_APIData[this.Name] = GenerateData;
@@ -311,6 +314,13 @@ namespace BPASmartClient.SCADAControl.CustomerControls
public void IsRunRefresh()
{
//测试运行
+ if (IsRun)
+ IsExecuteState = true;
+ else
+ {
+ IsExecuteState = false;
+ Dispose();
+ }
}
[Category("数据绑定")]
public string GenerateData
diff --git a/BPASmartClient.SCADAControl/CustomerControls/TheDataGrid.xaml.cs b/BPASmartClient.SCADAControl/CustomerControls/TheDataGrid.xaml.cs
index d61febe5..898fb51f 100644
--- a/BPASmartClient.SCADAControl/CustomerControls/TheDataGrid.xaml.cs
+++ b/BPASmartClient.SCADAControl/CustomerControls/TheDataGrid.xaml.cs
@@ -28,7 +28,7 @@ namespace BPASmartClient.SCADAControl.CustomerControls
///
/// TheDataGrid.xaml 的交互逻辑
///
- public partial class TheDataGrid :DataGrid, IExecutable
+ public partial class TheDataGrid :DataGrid, IExecutable, IDisposable
{
public TheDataGrid()
{
@@ -36,8 +36,8 @@ namespace BPASmartClient.SCADAControl.CustomerControls
//ResourceDictionary languageResDic = new ResourceDictionary();
//languageResDic.Source = new Uri(@"/BPASmartClient.SCADAControl;component/Themes/Generic.xaml", UriKind.RelativeOrAbsolute);
//this.Resources.MergedDictionaries.Add(languageResDic);
- MinWidth = 100;
- MinHeight = 100;
+ //MinWidth = 100;
+ //MinHeight = 100;
Width = 100;
Height = 100;
this.Loaded += TheDataGrid_Loaded; ;
@@ -55,6 +55,7 @@ namespace BPASmartClient.SCADAControl.CustomerControls
try
{
TabItemsStr = JsonConvert.SerializeObject(TabItems);
+ GenerateDataRefresh();
}
catch (Exception ex)
{
@@ -96,6 +97,7 @@ namespace BPASmartClient.SCADAControl.CustomerControls
}
}
+ Style = null;
if (DataSouceType == DataTypeEnum.API接口)
{
@@ -105,6 +107,14 @@ namespace BPASmartClient.SCADAControl.CustomerControls
}
}
+ public void Dispose()
+ {
+ timer.Stop();
+ FDataSouce = "";
+ if (IsRun) IsRun = false;
+ GenerateDataRefresh();
+ }
+
private void Timer_Tick(object? sender,EventArgs e)
{
if (!string.IsNullOrEmpty(DataSouceInformation))
@@ -172,7 +182,7 @@ namespace BPASmartClient.SCADAControl.CustomerControls
{
try
{
- if (!string.IsNullOrEmpty(FDataSouce))
+ //if (!string.IsNullOrEmpty(FDataSouce))
{
GenerateData = (string)CSharpConfig.GetInstance().RunCSharp(Code,new object[] { FDataSouce });
if (PropertyChange != null)
@@ -196,6 +206,26 @@ namespace BPASmartClient.SCADAControl.CustomerControls
public static readonly DependencyProperty CodeProperty =
DependencyProperty.Register("Code",typeof(string),typeof(TheDataGrid),new PropertyMetadata(_code));
[Category("数据绑定")]
+ public bool IsRun
+ {
+ get { return (bool)GetValue(RunProperty); }
+ set { SetValue(RunProperty, value); }
+ }
+ public static readonly DependencyProperty RunProperty =
+ DependencyProperty.Register("IsRun", typeof(bool), typeof(TheDataGrid), new PropertyMetadata(false, new PropertyChangedCallback(onIsRunChanged)));
+ private static void onIsRunChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => (d as TheDataGrid)?.IsRunRefresh();
+ public void IsRunRefresh()
+ {
+ //测试运行
+ if (IsRun)
+ IsExecuteState = true;
+ else
+ {
+ IsExecuteState = false;
+ Dispose();
+ }
+ }
+ [Category("数据绑定")]
public string GenerateData
{
get { return (string)GetValue(GenerateDataProperty); }
@@ -210,7 +240,7 @@ namespace BPASmartClient.SCADAControl.CustomerControls
{
try
{
- Dictionary keys= JsonConvert.DeserializeObject>(GenerateData);
+ Dictionary keys = JsonConvert.DeserializeObject>(GenerateData);
List> obj2 = JsonConvert.DeserializeObject>>(keys["data"].ToString());
//ItemsString = JsonConvert.DeserializeObject(GenerateData);
// 运行时进行项目绑定
@@ -219,7 +249,7 @@ namespace BPASmartClient.SCADAControl.CustomerControls
this.CanUserDeleteRows = false;
this.RowHeaderWidth = 0;
this.GridLinesVisibility = DataGridGridLinesVisibility.None;
- //this.BorderThickness = new Thickness(0);
+ this.BorderThickness = new Thickness(0);
this.ItemsSource = ListToDataTable(obj2).DefaultView;
}
catch (Exception ex)
@@ -227,6 +257,10 @@ namespace BPASmartClient.SCADAControl.CustomerControls
}
}
+ else
+ {
+ this.ItemsSource = new DataTable().DefaultView;
+ }
}
diff --git a/BPASmartClient.SCADAControl/CustomerControls/TheMQTT.xaml.cs b/BPASmartClient.SCADAControl/CustomerControls/TheMQTT.xaml.cs
index 8e72f96b..5131a2ef 100644
--- a/BPASmartClient.SCADAControl/CustomerControls/TheMQTT.xaml.cs
+++ b/BPASmartClient.SCADAControl/CustomerControls/TheMQTT.xaml.cs
@@ -185,6 +185,9 @@ namespace BPASmartClient.SCADAControl.CustomerControls
public void Dispose()
{
timer.Stop();
+ Direction = 0;
+ FDataSouce = "";
+ if (IsRun) IsRun = false;
}
#region 属性
@@ -308,7 +311,7 @@ namespace BPASmartClient.SCADAControl.CustomerControls
{
try
{
- if (!string.IsNullOrEmpty(FDataSouce))
+ //if (!string.IsNullOrEmpty(FDataSouce))
{
GenerateData = (string)CSharpConfig.GetInstance().RunCSharp(Code,new object[] { FDataSouce });
@@ -329,6 +332,26 @@ namespace BPASmartClient.SCADAControl.CustomerControls
public static readonly DependencyProperty CodeProperty =
DependencyProperty.Register("Code",typeof(string),typeof(TheMQTT),new PropertyMetadata(_code));
[Category("数据绑定")]
+ public bool IsRun
+ {
+ get { return (bool)GetValue(RunProperty); }
+ set { SetValue(RunProperty, value); }
+ }
+ public static readonly DependencyProperty RunProperty =
+ DependencyProperty.Register("IsRun", typeof(bool), typeof(TheMQTT), new PropertyMetadata(false, new PropertyChangedCallback(onIsRunChanged)));
+ private static void onIsRunChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => (d as TheMQTT)?.IsRunRefresh();
+ public void IsRunRefresh()
+ {
+ //测试运行
+ if (IsRun)
+ IsExecuteState = true;
+ else
+ {
+ IsExecuteState = false;
+ Dispose();
+ }
+ }
+ [Category("数据绑定")]
public string GenerateData
{
get { return (string)GetValue(GenerateDataProperty); }
diff --git a/BPASmartClient.SCADAControl/CustomerControls/TheRedis.xaml.cs b/BPASmartClient.SCADAControl/CustomerControls/TheRedis.xaml.cs
index 566b2d08..446eab74 100644
--- a/BPASmartClient.SCADAControl/CustomerControls/TheRedis.xaml.cs
+++ b/BPASmartClient.SCADAControl/CustomerControls/TheRedis.xaml.cs
@@ -200,6 +200,9 @@ namespace BPASmartClient.SCADAControl.CustomerControls
public void Dispose()
{
timer.Stop();
+ Direction = 0;
+ FDataSouce = "";
+ if (IsRun) IsRun = false;
}
#region 属性
@@ -301,7 +304,7 @@ namespace BPASmartClient.SCADAControl.CustomerControls
{
try
{
- if (!string.IsNullOrEmpty(FDataSouce))
+ //if (!string.IsNullOrEmpty(FDataSouce))
{
GenerateData = (string)CSharpConfig.GetInstance().RunCSharp(Code,new object[] { FDataSouce });
@@ -322,6 +325,26 @@ namespace BPASmartClient.SCADAControl.CustomerControls
public static readonly DependencyProperty CodeProperty =
DependencyProperty.Register("Code",typeof(string),typeof(TheRedis),new PropertyMetadata(_code));
[Category("数据绑定")]
+ public bool IsRun
+ {
+ get { return (bool)GetValue(RunProperty); }
+ set { SetValue(RunProperty, value); }
+ }
+ public static readonly DependencyProperty RunProperty =
+ DependencyProperty.Register("IsRun", typeof(bool), typeof(TheRedis), new PropertyMetadata(false, new PropertyChangedCallback(onIsRunChanged)));
+ private static void onIsRunChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => (d as TheRedis)?.IsRunRefresh();
+ public void IsRunRefresh()
+ {
+ //测试运行
+ if (IsRun)
+ IsExecuteState = true;
+ else
+ {
+ IsExecuteState = false;
+ Dispose();
+ }
+ }
+ [Category("数据绑定")]
public string GenerateData
{
get { return (string)GetValue(GenerateDataProperty); }
diff --git a/BeDesignerSCADA/Controls/CanvasPanel.cs b/BeDesignerSCADA/Controls/CanvasPanel.cs
index 5cc7d80f..40f37ead 100644
--- a/BeDesignerSCADA/Controls/CanvasPanel.cs
+++ b/BeDesignerSCADA/Controls/CanvasPanel.cs
@@ -929,7 +929,7 @@ namespace BeDesignerSCADA.Controls
// 排除非自定义的控件们
if (!(item is IExecutable))
continue;
-
+ if(item is IDisposable) (item as IDisposable).Dispose();
var xml = XamlWriter.Save(item);
var ele = XamlReader.Parse(xml) as FrameworkElement;
elements.Add(ele);
@@ -947,7 +947,10 @@ namespace BeDesignerSCADA.Controls
foreach (var item in Children)
{
-
+ // 排除非自定义的控件们
+ if (!(item is IExecutable))
+ continue;
+ if (item is IDisposable) (item as IDisposable).Dispose();
var xml = XamlWriter.Save(item);
sb.Append(xml + "\r\n");
}
@@ -967,20 +970,16 @@ namespace BeDesignerSCADA.Controls
while (sr.Peek() > -1)
{
string str = sr.ReadLine();
- //if (!str.Contains("NewConveyorBelt"))
+ try
+ {
+ var ele = XamlReader.Parse(str) as FrameworkElement;
+ Children.Add(ele);
+ }
+ catch (Exception ex)
{
- try
- {
- var ele = XamlReader.Parse(str) as FrameworkElement;
- Children.Add(ele);
- }
- catch (Exception ex)
- {
- }
-
}
-
+
}
}
diff --git a/BeDesignerSCADA/Controls/MainCanvasPanel.xaml b/BeDesignerSCADA/Controls/MainCanvasPanel.xaml
index d0906691..41e310d6 100644
--- a/BeDesignerSCADA/Controls/MainCanvasPanel.xaml
+++ b/BeDesignerSCADA/Controls/MainCanvasPanel.xaml
@@ -241,8 +241,11 @@
+
+
+
@@ -326,15 +329,13 @@
-
+
diff --git a/BeDesignerSCADA/ViewModel/MainViewModelNew.cs b/BeDesignerSCADA/ViewModel/MainViewModelNew.cs
index 5ebe7014..d268dd9c 100644
--- a/BeDesignerSCADA/ViewModel/MainViewModelNew.cs
+++ b/BeDesignerSCADA/ViewModel/MainViewModelNew.cs
@@ -37,7 +37,7 @@ namespace BeDesignerSCADA.ViewModel
{
IsRunning = !IsRunning;
});
- DevNameList = new ObservableCollection() { "qqqq", "wewew" };
+ //DevNameList = new ObservableCollection() { "qqqq", "wewew" };
//DataBusModel.GetInstance().RefreshTheVariableManagerAction += RefreshTheVariableManagerActionHader;
}