2026-01-07 10:59:03 +08:00
|
|
|
|
using System.Collections.ObjectModel;
|
2026-01-03 00:16:28 +08:00
|
|
|
|
using System.Windows.Input;
|
|
|
|
|
|
|
|
|
|
|
|
namespace SHH.CameraDashboard
|
|
|
|
|
|
{
|
|
|
|
|
|
public class VideoWallViewModel : ViewModelBase
|
|
|
|
|
|
{
|
|
|
|
|
|
// 视频列表
|
|
|
|
|
|
public ObservableCollection<VideoTileViewModel> VideoTiles { get; } = new ObservableCollection<VideoTileViewModel>();
|
|
|
|
|
|
|
|
|
|
|
|
// 控制 UniformGrid 的列数 (决定是 2x2 还是 3x3)
|
|
|
|
|
|
private int _columns = 2;
|
|
|
|
|
|
public int Columns
|
|
|
|
|
|
{
|
|
|
|
|
|
get => _columns;
|
|
|
|
|
|
set => SetProperty(ref _columns, value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 切换布局命令
|
|
|
|
|
|
public ICommand SetLayoutCommand { get; }
|
|
|
|
|
|
|
|
|
|
|
|
public VideoWallViewModel()
|
|
|
|
|
|
{
|
|
|
|
|
|
SetLayoutCommand = new RelayCommand<string>(ExecuteSetLayout);
|
|
|
|
|
|
|
|
|
|
|
|
// 3. 初始化格子 (不再需要传入 IP/Port 去主动连接了)
|
|
|
|
|
|
// 我们用 CameraId 或 Name 来作为匹配标识
|
|
|
|
|
|
InitVideoTiles();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void InitVideoTiles()
|
|
|
|
|
|
{
|
|
|
|
|
|
// 假设我们预设 4 个格子,分别对应不同的摄像头 ID
|
|
|
|
|
|
// 这里 ID 必须和采集端发送的 VideoPayload.CameraId 一致
|
|
|
|
|
|
//VideoTiles.Add(new VideoTileViewModel("1004", "仓库通道"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void ExecuteSetLayout(string layoutType)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (layoutType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case "1x1": Columns = 1; break;
|
|
|
|
|
|
case "2x2": Columns = 2; break;
|
|
|
|
|
|
case "3x3": Columns = 3; break;
|
|
|
|
|
|
case "4x4": Columns = 4; break;
|
|
|
|
|
|
default: Columns = 2; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|