using Serein.NodeFlow; using Serein.NodeFlow.Model; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Windows.Controls; using System.Windows.Media; namespace Serein.WorkBench.Node.View { /// /// 节点控件基类(控件) /// public abstract class NodeControlBase : UserControl, IDynamicFlowNode { public NodeControlViewModelBase ViewModel { get; set; } protected NodeControlBase() { this.Background = Brushes.Transparent; } protected NodeControlBase(NodeControlViewModelBase viewModelBase) { ViewModel = viewModelBase; this.Background = Brushes.Transparent; } } public abstract class NodeControlViewModelBase : INotifyPropertyChanged { public NodeControlViewModelBase(NodeBase node) { this.Node = node; MethodDetails = this.Node.MethodDetails; } /// /// 对应的节点实体类 /// public NodeBase Node { get; set; } /// /// 表示节点控件是否被选中 /// public bool IsSelect { get; set; } = false; private MethodDetails methodDetails; public MethodDetails MethodDetails { get => methodDetails; set { methodDetails = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } public class FLowNodeObObservableCollection : ObservableCollection { public void AddRange(IEnumerable items) { foreach (var item in items) { this.Items.Add(item); } OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add)); } } }