修改信息页面MonitorView的显示逻辑,添加当前步骤高亮显示
This commit is contained in:
1 parent
de843f4e90
commit
5f7c6bee47
7 files changed
+409
-34
No files matched your search
+21
-6
@@ -8,12 +8,13 @@
|
||||
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
||||
xmlns:rdp="clr-namespace:VncSharpWpf;assembly=VncSharpWpf"
|
||||
xmlns:viewmodel="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ViewModel"
|
||||
xmlns:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
|
||||
d:DataContext="{d:DesignInstance Type=viewmodel:MainWindowViewModel}"
|
||||
xmlns:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
|
||||
d:DataContext="{d:DesignInstance Type=local:MonitorView}"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="1000" d:DesignWidth="1900">
|
||||
<UserControl.Resources>
|
||||
<ConvertMoels:StateToColorConvert x:Key="StateToColorConvert"/>
|
||||
<ConvertMoels:BoolToVisidilityConvert x:Key="BoolToVisidilityConvert"/>
|
||||
</UserControl.Resources>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
@@ -40,6 +41,9 @@
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
<DataTrigger Binding="{Binding State}" Value="309">
|
||||
<Setter Property="Background" Value="Red"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
@@ -91,7 +95,7 @@
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<GridSplitter Grid.Row="1" Height="5" HorizontalAlignment="Stretch" Background="#FF00204E"/>
|
||||
<Grid Grid.Row="2" d:DataContext="{d:DesignInstance Type=viewmodel:MainWindowViewModel}">
|
||||
<Grid Grid.Row="2" >
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
@@ -103,9 +107,11 @@
|
||||
HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9" Background="White"
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" BorderBrush="{x:Null}"
|
||||
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False"
|
||||
CanUserDeleteRows="False" SelectionMode="Single" FontSize="15" Focusable="True" >
|
||||
<DataGrid.RowStyle >
|
||||
CanUserDeleteRows="False" SelectionMode="Single" FontSize="15" Focusable="True" ContextMenuOpening="Gridstep_ContextMenuOpening">
|
||||
<DataGrid.RowStyle>
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="IsHitTestVisible" Value="{Binding DataContext.IsInteractive,
|
||||
RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
|
||||
<Setter Property="Height" Value="30" />
|
||||
<Setter Property="FontSize" Value="25" />
|
||||
<Style.Triggers>
|
||||
@@ -116,6 +122,15 @@
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
<DataTrigger Binding="{Binding RUN}" Value="1">
|
||||
<Setter Property="Background" Value="#FF00D6FF"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding RUN}" Value="2">
|
||||
<Setter Property="Background" Value="Yellow"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding RUN}" Value="9">
|
||||
<Setter Property="Background" Value="Red"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
@@ -135,7 +150,7 @@
|
||||
<ContextMenu>
|
||||
<MenuItem Header="{x:Static lang:Resources.edit}" Click="MenuItem_edit"/>
|
||||
<MenuItem Header="{x:Static lang:Resources.Insert}" Click="MenuItem_Insert"/>
|
||||
<MenuItem Header="{x:Static lang:Resources.Delete}" Click="MenuItem_Delete"/>
|
||||
<MenuItem Header="{x:Static lang:Resources.Delete}" Click="MenuItem_Delete"/>
|
||||
</ContextMenu>
|
||||
</DataGrid.ContextMenu>
|
||||
<DataGrid.Columns>
|
||||
|
||||
+184
-15
@@ -33,29 +33,48 @@ using System.Net.NetworkInformation;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// MonitorView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class MonitorView : UserControl
|
||||
public partial class MonitorView : UserControl, INotifyPropertyChanged
|
||||
{
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
protected virtual void OnPropertyChanged(string propertyName)
|
||||
{
|
||||
if (PropertyChanged != null)
|
||||
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
public void RaisePropertyChanged(string propertyName)
|
||||
{
|
||||
if (PropertyChanged != null)
|
||||
{
|
||||
if (propertyName != null)
|
||||
{
|
||||
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MonitorView()
|
||||
{
|
||||
//DataContext = new MainWindowViewModel();
|
||||
DataContext = this;
|
||||
InitializeComponent();
|
||||
CountDown();
|
||||
machine= MainWindowViewModel.machine;
|
||||
workOrder= MainWindowViewModel.workOrder;
|
||||
dyelot= MainWindowViewModel.dyelot;
|
||||
machin_LOG.Text = MainWindowViewModel.machin_LOG;
|
||||
IsInteractive = false;
|
||||
DATA_view();
|
||||
}
|
||||
|
||||
|
||||
private string machine;
|
||||
private string workOrder;
|
||||
private string dyelot;
|
||||
private int machines_info=0;
|
||||
public static string Sys_log;
|
||||
|
||||
|
||||
private void Griddata_SelectionChanged(object sender, SelectionChangedEventArgs e)//设备列表
|
||||
{
|
||||
Stop.IsEnabled = true;
|
||||
@@ -69,7 +88,9 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
Curve.IsEnabled = true;
|
||||
Screen.IsEnabled = true;
|
||||
Receipt.IsEnabled = true;
|
||||
MainWindowViewModel.TechnologicalProcess_bool = true;
|
||||
TechnologicalProcess_bool = true;
|
||||
IsInteractive = false;
|
||||
|
||||
int rownum = Griddata.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
@@ -87,7 +108,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
|
||||
private void Gridstep_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
MainWindowViewModel.TechnologicalProcess_bool = false;
|
||||
TechnologicalProcess_bool = false;
|
||||
int rownum = Gridstep.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
@@ -191,6 +212,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
}//曲线
|
||||
private void ListViewItem_Resume(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
IsInteractive = false;
|
||||
if (!string.IsNullOrEmpty(machine))
|
||||
{
|
||||
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
||||
@@ -209,10 +231,11 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
Resume.IsEnabled = false;
|
||||
Delete.IsEnabled = false;
|
||||
Jump.IsEnabled = false;
|
||||
MainWindowViewModel.TechnologicalProcess_bool = true;
|
||||
TechnologicalProcess_bool = true;
|
||||
}//恢复
|
||||
private void ListViewItem_Paused(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
IsInteractive = true;
|
||||
if (!string.IsNullOrEmpty(machine))
|
||||
{
|
||||
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
||||
@@ -236,6 +259,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
}//暂停
|
||||
private void ListViewItem_Stop(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
IsInteractive = false;
|
||||
if (!string.IsNullOrEmpty(machine))
|
||||
{
|
||||
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
||||
@@ -282,7 +306,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
||||
});
|
||||
|
||||
MainWindowViewModel.TechnologicalProcess_bool = true;
|
||||
TechnologicalProcess_bool = true;
|
||||
}
|
||||
|
||||
private void ListViewItem_Jump(object sender, MouseButtonEventArgs e)
|
||||
@@ -306,7 +330,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
||||
});
|
||||
|
||||
MainWindowViewModel.TechnologicalProcess_bool = true;
|
||||
TechnologicalProcess_bool = true;
|
||||
}//跳步
|
||||
private void ListViewItem_Insert(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
@@ -317,7 +341,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
}//插入
|
||||
private void Insert_ButtonClicked(object sender, AddressUpdateEventArgs e)//cr返回结果
|
||||
{
|
||||
MainWindowViewModel.TechnologicalProcess_bool = true;
|
||||
TechnologicalProcess_bool = true;
|
||||
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
||||
dat_821.Clear();
|
||||
dat_821.Add("INSTRUCTION", "INSERT");
|
||||
@@ -355,7 +379,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
||||
});
|
||||
|
||||
MainWindowViewModel.TechnologicalProcess_bool = true;
|
||||
TechnologicalProcess_bool = true;
|
||||
}
|
||||
}//删除
|
||||
string Numder = null;
|
||||
@@ -414,11 +438,11 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
||||
});
|
||||
|
||||
MainWindowViewModel.TechnologicalProcess_bool = true;
|
||||
TechnologicalProcess_bool = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void CountDown()
|
||||
{
|
||||
DispatcherTimer timer1s = new DispatcherTimer//初始化循环,每1秒调用一次Tick
|
||||
@@ -431,6 +455,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
int Time_D = 0;
|
||||
void Tick_Event_1S(object sender, EventArgs e)//Tick_Event周期执行事件1S
|
||||
{
|
||||
DATA_view();
|
||||
if (Paused.IsEnabled)
|
||||
{
|
||||
if (!Resume.IsEnabled)
|
||||
@@ -438,7 +463,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
Time_D++;
|
||||
if (Time_D > 10)
|
||||
{
|
||||
MainWindowViewModel.TechnologicalProcess_bool = true;
|
||||
TechnologicalProcess_bool = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -496,8 +521,152 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
}//返回错误为空
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public string sys_machine; //显示log
|
||||
public string Sys_machine //通知UI控件参数改变
|
||||
{
|
||||
get { return sys_machine; }
|
||||
set { sys_machine = value; OnPropertyChanged("Sys_machine"); }
|
||||
}
|
||||
|
||||
bool _isInteractive;
|
||||
public bool IsInteractive//步骤表交互选择
|
||||
{
|
||||
get => _isInteractive;
|
||||
set
|
||||
{
|
||||
_isInteractive = value;
|
||||
OnPropertyChanged("IsInteractive");
|
||||
}
|
||||
}
|
||||
private void Gridstep_ContextMenuOpening(object sender, ContextMenuEventArgs e)
|
||||
{
|
||||
if(!IsInteractive) e.Handled = true;//阻止菜单显示
|
||||
}
|
||||
public static bool TechnologicalProcess_bool = true;
|
||||
private async void DATA_view()//IO显示
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
TechnologicalMachine_View = ToObservableCollection<TechnologicalM>(MainWindowViewModel.Machines);
|
||||
}
|
||||
catch (Exception) { }
|
||||
try
|
||||
{
|
||||
if (MainWindowViewModel.dt_TP.Rows.Count >= 0)
|
||||
{
|
||||
if (TechnologicalProcess_bool)
|
||||
{
|
||||
TechnologicalProcess_View = ToObservableCollection<TechnologicalP>(MainWindowViewModel.dt_TP);
|
||||
|
||||
}
|
||||
Sys_machine = MainWindowViewModel.MachineLOG;
|
||||
}
|
||||
}
|
||||
catch (Exception) { }
|
||||
});
|
||||
}
|
||||
ObservableCollection<TechnologicalP> technologicalProcess_View = new ObservableCollection<TechnologicalP>();
|
||||
ObservableCollection<TechnologicalM> technologicalMachine_View = new ObservableCollection<TechnologicalM>();
|
||||
public ObservableCollection<TechnologicalP> TechnologicalProcess_View
|
||||
{
|
||||
get { return technologicalProcess_View; }
|
||||
set
|
||||
{
|
||||
technologicalProcess_View = value;
|
||||
RaisePropertyChanged("TechnologicalProcess_View");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public ObservableCollection<TechnologicalM> TechnologicalMachine_View
|
||||
{
|
||||
get { return technologicalMachine_View; }
|
||||
set
|
||||
{
|
||||
technologicalMachine_View = value;
|
||||
RaisePropertyChanged("TechnologicalMachine_View");
|
||||
}
|
||||
}
|
||||
public class TechnologicalM
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string WorkOrder { get; set; }
|
||||
public string Dyelot { get; set; }
|
||||
public string Temperature { get; set; }
|
||||
public string WaterLevel { get; set; }
|
||||
public string Process { get; set; }
|
||||
public string Step { get; set; }
|
||||
public string Message { get; set; }
|
||||
public string State { get; set; }
|
||||
|
||||
}
|
||||
public class TechnologicalP
|
||||
{
|
||||
public int RUN { get; set; }
|
||||
public string ProgramID { get; set; }
|
||||
public string Program { get; set; }
|
||||
public double Step { get; set; }
|
||||
public string StepID { get; set; }
|
||||
public string StepName { get; set; }
|
||||
public string ParameterName { get; set; }
|
||||
public string Parameter1 { get; set; }
|
||||
public string Parameter2 { get; set; }
|
||||
public string Parameter3 { get; set; }
|
||||
public string Parameter4 { get; set; }
|
||||
public string Parameter5 { get; set; }
|
||||
public string DYELOT { get; set; }
|
||||
}
|
||||
|
||||
public ObservableCollection<T> ToObservableCollection<T>(DataTable dt) where T : class, new()
|
||||
{
|
||||
Type t = typeof(T);
|
||||
PropertyInfo[] propertys = t.GetProperties();
|
||||
ObservableCollection<T> lst = new ObservableCollection<T>();
|
||||
string typeName = string.Empty;
|
||||
foreach (DataRow dr in dt.Rows)
|
||||
{
|
||||
T entity = new T();
|
||||
foreach (PropertyInfo pi in propertys)
|
||||
{
|
||||
typeName = pi.Name;
|
||||
if (dt.Columns.Contains(typeName))
|
||||
{
|
||||
if (!pi.CanWrite) continue;
|
||||
object value = dr[typeName];
|
||||
if (value == DBNull.Value) continue;
|
||||
if (pi.PropertyType == typeof(string))
|
||||
{
|
||||
pi.SetValue(entity, value.ToString(), null);
|
||||
}
|
||||
else if (pi.PropertyType == typeof(int) || pi.PropertyType == typeof(int?))
|
||||
{
|
||||
pi.SetValue(entity, int.Parse(value.ToString()), null);
|
||||
}
|
||||
else if (pi.PropertyType == typeof(DateTime?) || pi.PropertyType == typeof(DateTime))
|
||||
{
|
||||
pi.SetValue(entity, DateTime.Parse(value.ToString()), null);
|
||||
}
|
||||
else if (pi.PropertyType == typeof(float))
|
||||
{
|
||||
pi.SetValue(entity, float.Parse(value.ToString()), null);
|
||||
}
|
||||
else if (pi.PropertyType == typeof(double))
|
||||
{
|
||||
pi.SetValue(entity, double.Parse(value.ToString()), null);
|
||||
}
|
||||
else
|
||||
{
|
||||
pi.SetValue(entity, value, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
lst.Add(entity);
|
||||
}
|
||||
return lst;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user