public CommandFilterViewModel() { void PopulateCollection <T>(ref List <string> collection, Func <string, string> selector = null, Func <string, bool> validation = null) where T : Enum { collection = new List <string>(); // default selection = no filter collection.Add(DESELECTION_DESCRIPTION); foreach (string enumVal in Enum.GetNames(typeof(T))) { if (!validation?.Invoke(enumVal) ?? false) { continue; } string selectorVal = selector?.Invoke(enumVal) ?? enumVal; if (collection.Contains(selectorVal)) { continue; } else { collection.Add(selectorVal); } } } int?SubscriptionBuilder(int?value, ref List <string> collection) => !value.HasValue ? value : value.Value == 0 || value.Value == -1 ? null : value; PopulateCollection <Transceiver>(ref _transceivers); PopulateCollection <Cmd>(ref _cmdSet, cmd => CmdAttribute.TryGetAttribute(Enum.Parse <Cmd>(cmd)).CmdSetDescription); PopulateCollection <Comms>(ref _comms); PopulateCollection <Ack>(ref _acks); this.WhenAnyValue(instance => instance.SrcModuleSelectionIndex).Subscribe(idx => SrcModuleSelectionIndex = SubscriptionBuilder(idx, ref _transceivers)); this.WhenAnyValue(instance => instance.DestModuleSelectionIndex).Subscribe(idx => DestModuleSelectionIndex = SubscriptionBuilder(idx, ref _transceivers)); this.WhenAnyValue(instance => instance.CmdSetSelectionIndex).Subscribe(idx => CmdSetSelectionIndex = SubscriptionBuilder(idx, ref _cmdSet)); this.WhenAnyValue(instance => instance.CmdSelectionIndex).Subscribe(idx => CmdSelectionIndex = SubscriptionBuilder(idx, ref _cmd)); this.WhenAnyValue(instance => instance.CommsSelectionIndex).Subscribe(idx => CommsSelectionIndex = SubscriptionBuilder(idx, ref _comms)); this.WhenAnyValue(instance => instance.AcksSelectionIndex).Subscribe(idx => AcksSelectionIndex = SubscriptionBuilder(idx, ref _acks)); this.WhenAnyValue(instance => instance.SrcModuleSelectionIndex).Subscribe(idx => DjiNetworkPacketPool?.EvaluateFilterOnPackets()); this.WhenAnyValue(instance => instance.DestModuleSelectionIndex).Subscribe(idx => DjiNetworkPacketPool?.EvaluateFilterOnPackets()); this.WhenAnyValue(instance => instance.CmdSetSelectionIndex).Subscribe(idx => DjiNetworkPacketPool?.EvaluateFilterOnPackets()); this.WhenAnyValue(instance => instance.CmdSelectionIndex).Subscribe(idx => DjiNetworkPacketPool?.EvaluateFilterOnPackets()); this.WhenAnyValue(instance => instance.CommsSelectionIndex).Subscribe(idx => DjiNetworkPacketPool?.EvaluateFilterOnPackets()); this.WhenAnyValue(instance => instance.AcksSelectionIndex).Subscribe(idx => DjiNetworkPacketPool?.EvaluateFilterOnPackets()); // restrict the cmd based on the cmdSet this.WhenAnyValue(instance => instance.CmdSetSelectionIndex).Subscribe(idx => { if (SubscriptionBuilder(idx, ref _cmdSet) == null) { return; } CmdAttribute GetAttributeByName(string name) => CmdAttribute.TryGetAttribute(Enum.Parse <Cmd>(name)); PopulateCollection <Cmd>(ref _cmd, cmd => GetAttributeByName(cmd).CmdDescription, cmd => GetAttributeByName(cmd).CmdSetDescription == _cmdSet[idx.Value]); this.RaisePropertyChanged(nameof(Cmd)); }); }
public NetworkPacketIdRangeFilterViewModel() => this.WhenAnyValue(instance => instance.PacketRange).Subscribe(range => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
public IpAddressFilterViewModel() { this.WhenAnyValue(instance => instance.Drone).Subscribe(drone => DjiNetworkPacketPool?.EvaluateFilterOnPackets()); this.WhenAnyValue(instance => instance.Operator).Subscribe(op => DjiNetworkPacketPool?.EvaluateFilterOnPackets()); }
public HexFilterViewModel() => this.WhenAnyValue(instance => instance.Hex).Subscribe(hex => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
public NumbericFilterViewModel() { this.WhenAnyValue(instance => instance.Numeric).Subscribe(numeric => DjiNetworkPacketPool?.EvaluateFilterOnPackets()); this.WhenAnyValue(instance => instance.HasValue).Subscribe(hasValue => DjiNetworkPacketPool?.EvaluateFilterOnPackets()); }