2026-04-22 10:24:28 +08:00
|
|
|
|
using Microsoft.Win32;
|
|
|
|
|
|
using Sunny.UI;
|
2026-04-18 18:14:12 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
2026-04-22 10:24:28 +08:00
|
|
|
|
using System.IO;
|
2026-04-18 18:14:12 +08:00
|
|
|
|
using System.Text;
|
|
|
|
|
|
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 头罩视野.Views
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// RecordDate.xaml 的交互逻辑
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
///
|
2026-04-22 08:44:19 +08:00
|
|
|
|
|
2026-04-18 18:14:12 +08:00
|
|
|
|
public partial class RecordDate : Page
|
|
|
|
|
|
|
|
|
|
|
|
{
|
2026-04-22 10:24:28 +08:00
|
|
|
|
// 数据存储列表
|
|
|
|
|
|
private List<dynamic> LeftEyeDataList = new List<dynamic>();
|
|
|
|
|
|
private List<dynamic> RightEyeDataList = new List<dynamic>();
|
|
|
|
|
|
|
|
|
|
|
|
// 长按清除用
|
|
|
|
|
|
private bool _isClearPressed = false;
|
|
|
|
|
|
private Thread _clearThread;
|
2026-04-18 18:14:12 +08:00
|
|
|
|
public RecordDate()
|
|
|
|
|
|
{
|
|
|
|
|
|
InitializeComponent();
|
2026-04-22 08:44:19 +08:00
|
|
|
|
DynamicHeader();
|
2026-04-22 10:24:28 +08:00
|
|
|
|
// 2. 调用(名字和上面的变量一致)
|
|
|
|
|
|
AddDataRow(dataGrid1, LeftEyeDataList, 64);
|
|
|
|
|
|
AddDataRow(dataGrid2, RightEyeDataList, 64);
|
|
|
|
|
|
// 测试数据
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 给表格添加一行数据(自动存起来,用于保存)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="dg">目标表格</param>
|
|
|
|
|
|
/// <param name="dataList">数据存储列表</param>
|
|
|
|
|
|
/// <param name="channelCount">通道数量 64/32</param>
|
|
|
|
|
|
void AddDataRow(DataGrid dg, List<dynamic> dataList, int channelCount)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 创建一行数据
|
|
|
|
|
|
dynamic row = new System.Dynamic.ExpandoObject();
|
|
|
|
|
|
var dict = (IDictionary<string, object>)row;
|
|
|
|
|
|
|
|
|
|
|
|
// 固定列
|
|
|
|
|
|
dict["Id"] = dataList.Count + 1;
|
|
|
|
|
|
dict["Time"] = DateTime.Now.ToString("HH:mm:ss");
|
|
|
|
|
|
dict["Date"] = DateTime.Now.ToString("yyyy-MM-dd");
|
2026-04-18 18:14:12 +08:00
|
|
|
|
|
2026-04-22 10:24:28 +08:00
|
|
|
|
// 通道列(Ch1 ~ Ch64)
|
|
|
|
|
|
for (int i = 1; i <= channelCount; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
dict[$"Ch{i}"] = 0; // 这里你可以替换成真实数据
|
|
|
|
|
|
}
|
2026-04-22 08:44:19 +08:00
|
|
|
|
|
2026-04-22 10:24:28 +08:00
|
|
|
|
// 存起来 + 显示
|
|
|
|
|
|
dataList.Add(row);
|
|
|
|
|
|
dg.Items.Add(row);
|
|
|
|
|
|
}
|
2026-04-22 08:44:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
//动态生成表头
|
|
|
|
|
|
void DynamicHeader()
|
|
|
|
|
|
{
|
|
|
|
|
|
// 2. 循环生成 64 个 ch 列
|
|
|
|
|
|
for (int i = 1; i <= 64; i++)
|
2026-04-18 18:14:12 +08:00
|
|
|
|
{
|
2026-04-22 08:44:19 +08:00
|
|
|
|
dataGrid1.Columns.Add(new DataGridTextColumn
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = $"ch.{i}",
|
|
|
|
|
|
Binding = new System.Windows.Data.Binding($"Ch{i}")
|
|
|
|
|
|
});
|
|
|
|
|
|
dataGrid2.Columns.Add(new DataGridTextColumn
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = $"ch.{i}",
|
|
|
|
|
|
Binding = new System.Windows.Data.Binding($"Ch{i}")
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
2026-04-18 18:14:12 +08:00
|
|
|
|
}
|
2026-04-22 08:44:19 +08:00
|
|
|
|
|
2026-04-22 10:24:28 +08:00
|
|
|
|
//#endregion
|
2026-04-22 08:44:19 +08:00
|
|
|
|
|
2026-04-22 10:24:28 +08:00
|
|
|
|
// 保存左眼
|
|
|
|
|
|
private void btnSaveLeft_Click(object sender, RoutedEventArgs e)
|
2026-04-18 18:14:12 +08:00
|
|
|
|
{
|
2026-04-22 10:49:59 +08:00
|
|
|
|
//SaveToCsv(LeftEyeDataList, $"左眼数据_{DateTime.Now:yyyyMMddHHmmss}.csv");
|
|
|
|
|
|
ModbusHelper.SaveToCsv(LeftEyeDataList, $"左眼数据_{DateTime.Now:yyyyMMddHHmmss}.csv");
|
2026-04-18 18:14:12 +08:00
|
|
|
|
}
|
2026-04-22 08:44:19 +08:00
|
|
|
|
|
2026-04-22 10:49:59 +08:00
|
|
|
|
|
2026-04-22 10:24:28 +08:00
|
|
|
|
// 保存右眼
|
|
|
|
|
|
private void btnSaveRight_Click(object sender, RoutedEventArgs e)
|
|
|
|
|
|
{
|
2026-04-22 10:49:59 +08:00
|
|
|
|
ModbusHelper.SaveToCsv(RightEyeDataList,$"右眼数据_{DateTime.Now:yyyyMMddHHmmss}.csv");
|
2026-04-22 10:24:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void btnClear_MouseDown(object sender, MouseButtonEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
_isClearPressed = true;
|
|
|
|
|
|
_clearThread = new Thread(() =>
|
|
|
|
|
|
{
|
|
|
|
|
|
Thread.Sleep(500); // 长按1秒触发
|
|
|
|
|
|
if (_isClearPressed)
|
|
|
|
|
|
{
|
|
|
|
|
|
Application.Current.Dispatcher.Invoke(() => ClearAllData());
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
_clearThread.Start();
|
|
|
|
|
|
}
|
|
|
|
|
|
// 清除所有数据
|
|
|
|
|
|
private void ClearAllData()
|
|
|
|
|
|
{
|
|
|
|
|
|
LeftEyeDataList.Clear();
|
|
|
|
|
|
dataGrid1.Items.Clear();
|
|
|
|
|
|
|
|
|
|
|
|
RightEyeDataList.Clear();
|
|
|
|
|
|
dataGrid2.Items.Clear();
|
|
|
|
|
|
|
|
|
|
|
|
MessageBox.Show("数据已清除");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void btnClear_MouseUp(object sender, MouseButtonEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
_isClearPressed = false;
|
|
|
|
|
|
_clearThread?.Join(100); // 等待线程结束最多100毫秒,然后强制结束
|
|
|
|
|
|
}
|
2026-04-22 08:44:19 +08:00
|
|
|
|
|
|
|
|
|
|
|
2026-04-18 18:14:12 +08:00
|
|
|
|
private void GoHome(object s, RoutedEventArgs e) => NavigationService.Content = null;
|
|
|
|
|
|
private void GoTest(object s, RoutedEventArgs e) => NavigationService.Content = new Views.PageTest();
|
|
|
|
|
|
private void GoRecord(object s, RoutedEventArgs e) => NavigationService.Content = new Views.RecordDate();
|
|
|
|
|
|
private void GoView(object s, RoutedEventArgs e) => NavigationService.Content = new Views.RecordPage();
|
|
|
|
|
|
|
|
|
|
|
|
//NavigationService.Navigate(new Views.RecordDate()); 页面相互跳转
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|