using BeDesignerSCADA.Common; using BeDesignerSCADA.ViewModel; using BPASmart.Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; 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.Shapes; namespace BeDesignerSCADA.View { /// /// PropertyBindingWindow.xaml 的交互逻辑 /// public partial class PropertyBindingWindow : Window { public PropertyBindingWindow() { InitializeComponent(); Owner = Application.Current.MainWindow; Closing += (s, e) => { e.Cancel = true; Hide(); }; } public static PropertyBindingWindow Instance { get; } = new PropertyBindingWindow(); /// /// 设备名称集合 /// private ObservableCollection _DevNameList; public ObservableCollection DevNameList { get { return _DevNameList; } set { _DevNameList = value; } } /// /// 设备变量集合 /// private ObservableCollection _DevValueList; public ObservableCollection 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); Instance.VariablePath = _VariablePath; Instance.ProperpName.Text = selectproperty.Name; Instance.BindingName.Text = pros; Instance.ShowDialog(); if (Instance.IsOk) { return Instance.BindingName.Text; } else { return pros; } } public bool IsOk { get; set; } private void CancelBtn_Click(object sender, RoutedEventArgs e) { IsOk = false; Close(); } private void ConfirmBtn_Click(object sender, RoutedEventArgs e) { IsOk = true; Close(); } private void ClearBtn_Click(object sender, RoutedEventArgs e) { Instance.BindingName.Text = ""; IsOk = true; Close(); } /// /// 变量选择 /// /// /// 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) { } } /// /// 变量下拉框打开事件 /// /// /// private void valuebox_DropDownOpened(object sender, EventArgs e) { try { Instance.DevValueList = new System.Collections.ObjectModel.ObservableCollection(); 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) { } } /// /// 设备名称选择 /// /// /// 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) { } } /// /// 设备名称下拉框打开事件 /// /// /// private void namebox_DropDownOpened(object sender, EventArgs e) { Instance.DevNameList = new System.Collections.ObjectModel.ObservableCollection(); 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; } } }