@@ -1,6 +1,7 @@ | |||||
using BPASmartClient.Compiler; | using BPASmartClient.Compiler; | ||||
using BPASmartClient.DATABUS; | using BPASmartClient.DATABUS; | ||||
using BPASmartClient.SCADAControl; | using BPASmartClient.SCADAControl; | ||||
using Newtonsoft.Json; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.ComponentModel; | using System.ComponentModel; | ||||
@@ -72,6 +73,17 @@ namespace BPASmartClient.SCADAControl.CustomerControls | |||||
} | } | ||||
public static readonly DependencyProperty TimeCountProperty = | public static readonly DependencyProperty TimeCountProperty = | ||||
DependencyProperty.Register("TimeCount",typeof(int),typeof(TheTextBlock),new PropertyMetadata(50)); | DependencyProperty.Register("TimeCount",typeof(int),typeof(TheTextBlock),new PropertyMetadata(50)); | ||||
/// <summary> | |||||
/// 数据模板 | |||||
/// </summary> | |||||
private Dictionary<string, object> DataModel | |||||
{ | |||||
get { return (Dictionary<string, object>)GetValue(DataModelProperty); } | |||||
set { SetValue(DataModelProperty, value); } | |||||
} | |||||
private static readonly DependencyProperty DataModelProperty = | |||||
DependencyProperty.Register("DataModel", typeof(Dictionary<string, object>), typeof(TheTextBlock), new PropertyMetadata(new Dictionary<string, object>())); | |||||
public event EventHandler PropertyChange; //声明一个事件 | public event EventHandler PropertyChange; //声明一个事件 | ||||
/// <summary> | /// <summary> | ||||
/// 属性刷新器 | /// 属性刷新器 | ||||
@@ -86,6 +98,16 @@ namespace BPASmartClient.SCADAControl.CustomerControls | |||||
/// </summary> | /// </summary> | ||||
public void Register() | public void Register() | ||||
{ | { | ||||
//Binding binding = new Binding(); | |||||
//binding.RelativeSource = new RelativeSource() { Mode = RelativeSourceMode.Self }; | |||||
//binding.Path = new PropertyPath(string.Format("DataModel[{0}].通道校准参数2", "小配料机")); | |||||
//SetBinding(TextProperty, binding); | |||||
//Binding binding = new Binding(); | |||||
//binding.RelativeSource = new RelativeSource() { Mode = RelativeSourceMode.Self }; | |||||
//binding.Path = new PropertyPath("this"); | |||||
//SetBinding(DataContextProperty, binding); | |||||
PropertyInfo[] propertyInfos = this.GetType().GetProperties(); | PropertyInfo[] propertyInfos = this.GetType().GetProperties(); | ||||
foreach (PropertyInfo propertyInfo in propertyInfos) | foreach (PropertyInfo propertyInfo in propertyInfos) | ||||
{ | { | ||||
@@ -99,7 +121,7 @@ namespace BPASmartClient.SCADAControl.CustomerControls | |||||
} | } | ||||
} | } | ||||
if (propertyBing.Count > 0) | |||||
//if (propertyBing.Count > 0) | |||||
{ | { | ||||
timer.Interval = TimeSpan.FromMilliseconds(TimeCount); | timer.Interval = TimeSpan.FromMilliseconds(TimeCount); | ||||
timer.Tick += Timer_Tick; ; | timer.Tick += Timer_Tick; ; | ||||
@@ -115,12 +137,15 @@ namespace BPASmartClient.SCADAControl.CustomerControls | |||||
{ | { | ||||
try | try | ||||
{ | { | ||||
DataModel = JsonConvert.DeserializeObject<Dictionary<string, object>>(JsonConvert.SerializeObject(Class_DataBus.GetInstance().Dic_RedisData)); | |||||
foreach (var item in propertyBing) | foreach (var item in propertyBing) | ||||
{ | { | ||||
//{Binding 测试设备.VAR_A_2} | //{Binding 测试设备.VAR_A_2} | ||||
string[] str = item.Value.Replace("{Binding ","").Replace("}","").Split("."); | string[] str = item.Value.Replace("{Binding ","").Replace("}","").Split("."); | ||||
if (str.Length > 1) | if (str.Length > 1) | ||||
{ | { | ||||
DataModel = JsonConvert.DeserializeObject<Dictionary<string, object>>(JsonConvert.SerializeObject(Class_DataBus.GetInstance().Dic_RedisData)); | |||||
if (Class_DataBus.GetInstance().Dic_RedisData.ContainsKey(str[0])) | if (Class_DataBus.GetInstance().Dic_RedisData.ContainsKey(str[0])) | ||||
{ | { | ||||
Dictionary<string, object> b = Class_DataBus.GetInstance().Dic_RedisData[str[0]]; | Dictionary<string, object> b = Class_DataBus.GetInstance().Dic_RedisData[str[0]]; | ||||
@@ -553,9 +553,6 @@ namespace BeDesignerSCADA.Controls | |||||
} | } | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 设备名称下拉框打开事件 | /// 设备名称下拉框打开事件 | ||||
/// </summary> | /// </summary> | ||||
@@ -5,7 +5,7 @@ | |||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | ||||
xmlns:local="clr-namespace:BeDesignerSCADA.View" | xmlns:local="clr-namespace:BeDesignerSCADA.View" | ||||
mc:Ignorable="d" | mc:Ignorable="d" | ||||
Title="PropertyBindingWindow" Height="160" Width="400" | |||||
Title="PropertyBindingWindow" Height="220" Width="400" | |||||
Background="White" | Background="White" | ||||
BorderBrush="#FFDEDEDE" | BorderBrush="#FFDEDEDE" | ||||
BorderThickness="1" | BorderThickness="1" | ||||
@@ -25,7 +25,21 @@ | |||||
<TextBlock Foreground="Green" FontSize="16" Text="当前设置属性名称为:" TextWrapping="Wrap" HorizontalAlignment="Center" VerticalAlignment="Center"/> | <TextBlock Foreground="Green" FontSize="16" Text="当前设置属性名称为:" TextWrapping="Wrap" HorizontalAlignment="Center" VerticalAlignment="Center"/> | ||||
<TextBlock x:Name="ProperpName" Foreground="Red" FontSize="14" Text="属性名称" TextWrapping="Wrap" HorizontalAlignment="Center" VerticalAlignment="Center"/> | <TextBlock x:Name="ProperpName" Foreground="Red" FontSize="14" Text="属性名称" TextWrapping="Wrap" HorizontalAlignment="Center" VerticalAlignment="Center"/> | ||||
</StackPanel> | </StackPanel> | ||||
<ComboBox x:Name="BindingName" Margin="10,0,10,0" Height="24" Grid.Column="1" IsEditable="True" ></ComboBox> | |||||
<TextBlock Margin="10,0,0,0" Foreground="Green" FontSize="12" Text="Redis数据绑定模板" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Center"/> | |||||
<Grid Margin="0,5,0,5"> | |||||
<Grid.ColumnDefinitions> | |||||
<ColumnDefinition Width="40" /> | |||||
<ColumnDefinition Width="*" x:Name="key"/> | |||||
<ColumnDefinition Width="*" x:Name="Text"/> | |||||
</Grid.ColumnDefinitions> | |||||
<ComboBox x:Name="namebox" DropDownOpened="namebox_DropDownOpened" Grid.Column="1" Height="25" IsTextSearchEnabled="True" IsEditable="True" Tag="{Binding Text, ElementName=valuebox}" TextBoxBase.TextChanged="ComboBoxName_TextChanged" | |||||
> | |||||
</ComboBox> | |||||
<ComboBox x:Name="valuebox" Margin="20,0,20,0" DropDownOpened="valuebox_DropDownOpened" Grid.Column="2" Height="25" IsTextSearchEnabled="True" IsEditable="True" Tag="{Binding Text, ElementName=namebox}" TextBoxBase.TextChanged="ComboBoxValue_TextChanged" | |||||
/> | |||||
</Grid> | |||||
<TextBlock Margin="10,0,0,0" Foreground="Green" FontSize="12" Text="最终模板" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Center"/> | |||||
<TextBox x:Name="BindingName" Margin="10,0,20,0" Height="24" Grid.Column="1" ></TextBox> | |||||
</StackPanel> | </StackPanel> | ||||
</Grid> | </Grid> | ||||
@@ -1,6 +1,9 @@ | |||||
using BeDesignerSCADA.Common; | using BeDesignerSCADA.Common; | ||||
using BeDesignerSCADA.ViewModel; | |||||
using BPASmart.Model; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.ObjectModel; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
@@ -29,11 +32,45 @@ namespace BeDesignerSCADA.View | |||||
public static PropertyBindingWindow Instance { get; } = new PropertyBindingWindow(); | public static PropertyBindingWindow Instance { get; } = new PropertyBindingWindow(); | ||||
/// <summary> | |||||
/// 设备名称集合 | |||||
/// </summary> | |||||
private ObservableCollection<string> _DevNameList; | |||||
public ObservableCollection<string> DevNameList | |||||
{ | |||||
get | |||||
{ | |||||
return _DevNameList; | |||||
} | |||||
set | |||||
{ | |||||
_DevNameList = value; | |||||
} | |||||
} | |||||
public static string ShowEdit(DependencyProperty selectproperty, FrameworkElement control) | |||||
/// <summary> | |||||
/// 设备变量集合 | |||||
/// </summary> | |||||
private ObservableCollection<string> _DevValueList; | |||||
public ObservableCollection<string> DevValueList | |||||
{ | |||||
get | |||||
{ | |||||
return _DevValueList; | |||||
} | |||||
set | |||||
{ | |||||
_DevValueList = value; | |||||
} | |||||
} | |||||
public string VariablePath = string.Empty; | |||||
public static string ShowEdit(DependencyProperty selectproperty, FrameworkElement control, string _VariablePath) | |||||
{ | { | ||||
// 获取所有控件的可用属性 | // 获取所有控件的可用属性 | ||||
var pros = PropertyHelper.GetBindString(selectproperty, control); | var pros = PropertyHelper.GetBindString(selectproperty, control); | ||||
Instance.VariablePath = _VariablePath; | |||||
Instance.ProperpName.Text = selectproperty.Name; | Instance.ProperpName.Text = selectproperty.Name; | ||||
Instance.BindingName.Text = pros; | Instance.BindingName.Text = pros; | ||||
Instance.ShowDialog(); | Instance.ShowDialog(); | ||||
@@ -67,5 +104,105 @@ namespace BeDesignerSCADA.View | |||||
IsOk = true; | IsOk = true; | ||||
Close(); | Close(); | ||||
} | } | ||||
/// <summary> | |||||
/// 变量选择 | |||||
/// </summary> | |||||
/// <param name="sender"></param> | |||||
/// <param name="e"></param> | |||||
private void ComboBoxValue_TextChanged(object sender, TextChangedEventArgs e) | |||||
{ | |||||
try | |||||
{ | |||||
if (sender is System.Windows.Controls.ComboBox) | |||||
{ | |||||
System.Windows.Controls.ComboBox toggle = (System.Windows.Controls.ComboBox)sender; | |||||
if (toggle.Tag != null && !string.IsNullOrEmpty(toggle.Text)) | |||||
{ | |||||
Instance.BindingName.Text = string.Format("DataModel[{0}].{1}", toggle.Tag, toggle.Text); | |||||
} | |||||
} | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 变量下拉框打开事件 | |||||
/// </summary> | |||||
/// <param name="sender"></param> | |||||
/// <param name="e"></param> | |||||
private void valuebox_DropDownOpened(object sender, EventArgs e) | |||||
{ | |||||
try | |||||
{ | |||||
Instance.DevValueList = new System.Collections.ObjectModel.ObservableCollection<string>(); | |||||
if (sender is System.Windows.Controls.ComboBox) | |||||
{ | |||||
System.Windows.Controls.ComboBox toggle = (System.Windows.Controls.ComboBox)sender; | |||||
if (toggle.Tag == null) return; | |||||
CommunicationPar communication = null; | |||||
if (DataBusModel.GetInstance().KeyValues.ContainsKey(Instance.VariablePath)) | |||||
{ | |||||
communication = DataBusModel.GetInstance().KeyValues[Instance.VariablePath]; | |||||
} | |||||
CommunicationModel mode = communication?.CommunicationDevices?.ToList().Find(par => par.DeviceName == toggle.Tag.ToString()); | |||||
if (mode != null) | |||||
{ | |||||
mode?.VarTableModels?.ToList().ForEach(par => { Instance.DevValueList.Add(par.VarName); }); | |||||
} | |||||
} | |||||
valuebox.ItemsSource = Instance.DevValueList; | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 设备名称选择 | |||||
/// </summary> | |||||
/// <param name="sender"></param> | |||||
/// <param name="e"></param> | |||||
private void ComboBoxName_TextChanged(object sender, TextChangedEventArgs e) | |||||
{ | |||||
try | |||||
{ | |||||
if (sender is System.Windows.Controls.ComboBox) | |||||
{ | |||||
System.Windows.Controls.ComboBox toggle = (System.Windows.Controls.ComboBox)sender; | |||||
if (toggle.Tag != null && !string.IsNullOrEmpty(toggle.Text)) | |||||
{ | |||||
Instance.BindingName.Text = string.Format("DataModel[{0}].{1}", toggle.Text, toggle.Tag); | |||||
} | |||||
} | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 设备名称下拉框打开事件 | |||||
/// </summary> | |||||
/// <param name="sender"></param> | |||||
/// <param name="e"></param> | |||||
private void namebox_DropDownOpened(object sender, EventArgs e) | |||||
{ | |||||
Instance.DevNameList = new System.Collections.ObjectModel.ObservableCollection<string>(); | |||||
CommunicationPar communication = null; | |||||
if (DataBusModel.GetInstance().KeyValues.ContainsKey(Instance.VariablePath)) | |||||
{ | |||||
communication = DataBusModel.GetInstance().KeyValues[Instance.VariablePath]; | |||||
} | |||||
communication?.CommunicationDevices?.ToList().ForEach(x => { Instance.DevNameList.Add(x.DeviceName); }); | |||||
namebox.ItemsSource = Instance.DevNameList; | |||||
} | |||||
} | } | ||||
} | } |
@@ -268,7 +268,7 @@ namespace BeDesignerSCADA.ViewModel | |||||
DependencyProperty dependencyProperty = PropertyHelper.GetDependencyProperties(selectControl)?.ToList().Find(x => x.Name == selectProName); | DependencyProperty dependencyProperty = PropertyHelper.GetDependencyProperties(selectControl)?.ToList().Find(x => x.Name == selectProName); | ||||
if (dependencyProperty != null) | if (dependencyProperty != null) | ||||
{ | { | ||||
string _binding = PropertyBindingWindow.ShowEdit(dependencyProperty, (selectControl as FrameworkElement)); | |||||
string _binding = PropertyBindingWindow.ShowEdit(dependencyProperty, (selectControl as FrameworkElement), VariablePath); | |||||
if (!string.IsNullOrEmpty(_binding)) | if (!string.IsNullOrEmpty(_binding)) | ||||
{ | { | ||||
Binding bindingText = new Binding() { Mode = BindingMode.TwoWay, Path = new PropertyPath(_binding) }; | Binding bindingText = new Binding() { Mode = BindingMode.TwoWay, Path = new PropertyPath(_binding) }; | ||||