using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Reactive.Linq;
using System.Text;
using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramDesigner.Models;
namespace AIStudio.Wpf.SFC.ViewModels
{
public class Simulate_SolenoidViewModel : SFCNode
{
private IDisposable diChangedSubscription;
public Simulate_SolenoidViewModel() : this(null)
{
}
public Simulate_SolenoidViewModel(IDiagramViewModel root) : base(root, SFCNodeKinds.Simulate_Solenoid)
{
ItemWidth = 32;
ItemHeight = 32;
ExecuteAddLeftInput(null);
ExecuteAddRightOutput(null);
}
public Simulate_SolenoidViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
}
public Simulate_SolenoidViewModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType)
{
}
public override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root, initNew);
CustomText = true;
if (diChangedSubscription != null)
{
diChangedSubscription.Dispose();
}
Random random = new Random();
diChangedSubscription = WhenPropertyChanged.Where(o => o.ToString() == "Value").Throttle(TimeSpan.FromSeconds(random.Next(1,10))).Subscribe(OnValueChanged);//Sample
}
protected override void InitNew()
{
base.InitNew();
}
///
/// 输入
///
private LinkPoint _dILinkPoint;
public LinkPoint DILinkPoint
{
get
{
return _dILinkPoint;
}
set
{
if (_dILinkPoint != null)
{
_dILinkPoint.PropertyChanged -= _dILinkPoint_PropertyChanged;
}
SetProperty(ref _dILinkPoint, value);
if (_dILinkPoint != null)
{
_dILinkPoint.PropertyChanged += _dILinkPoint_PropertyChanged;
}
}
}
private void _dILinkPoint_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "Value")
{
if (DOLinkPoint != null)
{
Value = DILinkPoint.Value;
}
}
}
private void OnValueChanged(string propertyName)
{
if (DOLinkPoint != null)
{
DOLinkPoint.Value = Value;
}
}
///
/// 反馈
///
private LinkPoint _dOLinkPoint;
public LinkPoint DOLinkPoint
{
get
{
return _dOLinkPoint;
}
set
{
SetProperty(ref _dOLinkPoint, value);
}
}
protected override void ExecuteEditCommand(object parameter)
{
Simulate_SolenoidViewModelData data = new Simulate_SolenoidViewModelData(DILinkPoint, DOLinkPoint);
if (visualiserService.ShowDialog(data) == true)
{
this.DILinkPoint = data.DILinkPoint;
this.DOLinkPoint = data.DOLinkPoint;
}
}
}
}