using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Inspectron.Camera { /// /// Standard implementation of ICameraParameter interface /// public class CameraParameter : ICameraParameter, INotifyPropertyChanged { public CameraParameter(string name, Func get, Action set, IEnumerable values = null) { Name = name; this.setter = set; this.getter = get; Values = new ReadOnlyCollection(values != null ? values.ToList() : new List()); } public string Name { get; private set; } public object Value { get { return getter(); } set { if (setter == null) throw new NotSupportedException("This is a read-only parameter"); setter(value); RaisePropertyChanged("Value"); } } public bool IsReadOnly { get { return setter == null; } } public ReadOnlyCollection Values { get; private set; } Action setter; Func getter; private void RaisePropertyChanged(string prop) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(prop)); } public event PropertyChangedEventHandler PropertyChanged; } }