2025-09-04 18:28:02 +08:00

179 lines
5.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Input;
using Prism.Services.Dialogs;
using SWS.Commons;
using SWS.Model;
using Telerik.Windows.Controls;
using DialogParameters = Prism.Services.Dialogs.DialogParameters;
namespace SWS.WPF.ViewModels
{
public class DialogSignalSelectViewModel : DialogBase, IDialogAware
{
public DialogSignalSelectViewModel()
{
}
public string Title => "";
public event Action<IDialogResult> RequestClose;
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
}
private ObservableCollection<Signal> _listSignal;
/// <summary>
/// 单位列表
/// </summary>
public ObservableCollection<Signal> listSignal
{
get { return _listSignal; }
set { _listSignal = value; RaisePropertyChanged(nameof(listSignal)); }
}
private Signal _SelectedSignal;
/// <summary>
/// 选中的单位
/// </summary>
public Signal SelectedSignal
{
get { return _SelectedSignal; }
set { _SelectedSignal = value; RaisePropertyChanged(nameof(SelectedSignal)); }
}
private string _Info;
/// <summary>
/// 列表上方文字
/// </summary>
public string Info
{
get { return _Info; }
set { _Info = value; RaisePropertyChanged(nameof(Info)); }
}
private Visibility _IsVisibility = Visibility.Collapsed;
/// <summary>
/// 控制取消关联按钮是否可见
/// </summary>
public Visibility IsVisibility
{
get { return _IsVisibility; }
set { _IsVisibility = value;
RaisePropertyChanged(nameof(IsVisibility));
}
}
public void OnDialogOpened(IDialogParameters parameters)
{
title = parameters.GetValue<string>(GlobalObject.dialogPar.title.ToString());
Info = parameters.GetValue<string>(GlobalObject.dialogPar.info.ToString());
var signals = parameters.GetValue<ObservableCollection<SignalManagementInfo>>(GlobalObject.dialogPar.para1.ToString());
listSignal = new ObservableCollection<Signal>();
foreach (var item in signals)
{
if (title.Equals("信号选择框"))
{
if (item.type.Equals("信号"))
{
listSignal.Add(new Signal() { SignalId = item.Wire_Group_ID, SignalName = item.Group_Name });
}
}
else if (title.Equals("信号关联列表"))
{
listSignal.Add(new Signal() { SignalId = item.Wire_Group_ID, SignalName = item.Group_Name });
IsVisibility = Visibility.Visible;
}
}
}
public override void ExecuteOKCommandAsync(object para)
{
IDialogParameters par = new DialogParameters();
if (title.Equals("信号选择框"))
{
if (SelectedSignal == null)
{
MessageBox.Show("请选择一个信号!");
return;
}
}
else if (title.Equals("信号关联列表"))
{
//如何是取消关联,则把取消的列表传回去
par.Add(GlobalObject.dialogPar.para2.ToString(), CancelAssociationls);
}
par.Add(GlobalObject.dialogPar.para1.ToString(), SelectedSignal);
DialogResult result = new DialogResult(ButtonResult.Yes, par);
RequestClose.Invoke(result);
}
public override void ExecuteCloseCommand(object parameter)
{
if (parameter as string == "ClickNo")
{
DialogResult result = new DialogResult(ButtonResult.No);
RequestClose.Invoke(result);
}
else
{
DialogResult result = new DialogResult(ButtonResult.Cancel);
RequestClose.Invoke(result);
}
this.Dispose();
}
//全局的取消关联列表
List<Signal> CancelAssociationls = new List<Signal>();
public ICommand CancelAssociationCmd => new DelegateCommand(CancelAssociation_Click);
/// <summary>
/// 取消关联按钮的点击事件
/// </summary>
/// <param name="parameter"></param>
public virtual void CancelAssociation_Click(object parameter)
{
CancelAssociationls.Add(SelectedSignal);
listSignal.Remove(SelectedSignal);
}
}
public class Signal : ViewModelBase
{
private string _SignalId;
/// <summary>
/// Id
/// </summary>
public string SignalId
{
get { return _SignalId; }
set { _SignalId = value; RaisePropertyChanged(nameof(SignalId)); }
}
private string _SignalName;
/// <summary>
/// 信号
/// </summary>
public string SignalName
{
get { return _SignalName; }
set { _SignalName = value; RaisePropertyChanged(nameof(SignalName)); }
}
}
}