85 lines
2.6 KiB
C#
85 lines
2.6 KiB
C#
using MainShell.Common;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Windows;
|
||
|
||
namespace MainShell.Resources.CustomControl
|
||
{
|
||
/// <summary>
|
||
/// 芯片Map的数据模型,用于MVVM绑定
|
||
/// </summary>
|
||
public class DieMapModel
|
||
{
|
||
public int Rows { get; private set; }
|
||
public int Columns { get; private set; }
|
||
public Point[,] Coordinates { get; private set; }
|
||
public DieState[,] States { get; private set; }
|
||
|
||
public event EventHandler MapInitialized;
|
||
public event EventHandler<(int Row, int Col, DieState State)> DieStateChanged;
|
||
public event EventHandler<IEnumerable<(int Row, int Col, DieState State)>> DieStatesChanged;
|
||
|
||
/// <summary>
|
||
/// 初始化Map图大小和坐标
|
||
/// </summary>
|
||
public void Initialize(int rows, int columns, Point[,] coordinates = null)
|
||
{
|
||
Rows = rows;
|
||
Columns = columns;
|
||
Coordinates = coordinates;
|
||
States = new DieState[rows, columns];
|
||
|
||
// 默认全部设置为NotExist,或者根据需要设置
|
||
for (int r = 0; r < rows; r++)
|
||
{
|
||
for (int c = 0; c < columns; c++)
|
||
{
|
||
States[r, c] = DieState.Available;
|
||
}
|
||
}
|
||
|
||
MapInitialized?.Invoke(this, EventArgs.Empty);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新单个芯片状态
|
||
/// </summary>
|
||
public void SetDieState(int row, int col, DieState state)
|
||
{
|
||
if (States != null && row >= 0 && row < Rows && col >= 0 && col < Columns)
|
||
{
|
||
if (States[row, col] != state)
|
||
{
|
||
States[row, col] = state;
|
||
DieStateChanged?.Invoke(this, (row, col, state));
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 批量更新芯片状态
|
||
/// </summary>
|
||
public void SetDieStates(IEnumerable<(int row, int col, DieState state)> updates)
|
||
{
|
||
if (States == null) return;
|
||
|
||
bool changed = false;
|
||
foreach (var update in updates)
|
||
{
|
||
if (update.row >= 0 && update.row < Rows && update.col >= 0 && update.col < Columns)
|
||
{
|
||
if (States[update.row, update.col] != update.state)
|
||
{
|
||
States[update.row, update.col] = update.state;
|
||
changed = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (changed)
|
||
{
|
||
DieStatesChanged?.Invoke(this, updates);
|
||
}
|
||
}
|
||
}
|
||
} |