using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Reactive.Linq;
using System.Text;
using Util.DiagramDesigner;
namespace AIStudio.Wpf.SFC.ViewModels
{
public class Simulate_SolenoidViewModel : SFCNode
{
private IDisposable diChangedSubscription;
public Simulate_SolenoidViewModel() : base(SFCNodeKinds.Simulate_Solenoid)
{
ItemWidth = 32;
ItemHeight = 32;
ExecuteAddLeftInput(null);
ExecuteAddRightOutput(null);
}
public Simulate_SolenoidViewModel(IDiagramViewModel parent, DesignerItemBase designer) : base(parent, designer)
{
}
protected override void Init()
{
base.Init();
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
}
private bool _showText;
public override bool ShowText
{
get
{
return false;
}
set
{
SetProperty(ref _showText, value);
}
}
///
/// 输入
///
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;
}
}
}
}