Пример #1
0
        public void Execute()
        {
            var src = new Person();

            using (var dest = new DelegateCommand(
                       () => src.Name = "Done",
                       () => src.Age > 0
                       )) {
                var count = 0;
                dest.Refresh();
                dest.CanExecuteChanged += (s, e) => ++ count;
                dest.Associate(src);
                Assert.That(dest.CanExecute(), Is.False);
                Assert.That(count, Is.EqualTo(0));
                src.Age = 10;
                Assert.That(dest.CanExecute(), Is.True);
                Assert.That(count, Is.EqualTo(1));
                src.Age = -20;
                Assert.That(dest.CanExecute(), Is.False);
                Assert.That(count, Is.EqualTo(2));
                dest.Refresh();
                dest.Execute();
                Assert.That(src.Name, Is.EqualTo("Done"));
                Assert.That(count, Is.EqualTo(4));
            }
        }
Пример #2
0
        public void Execute_Generic()
        {
            var src = new Person();

            using (var dest = new DelegateCommand <int>(
                       e => src.Name = $"Done:{e}",
                       e => e > 0 && src.Age > 0
                       )) {
                var count = 0;
                dest.Refresh();
                dest.CanExecuteChanged += (s, e) => ++ count;
                dest.Associate(src);
                Assert.That(dest.CanExecute(-10), Is.False);
                Assert.That(dest.CanExecute(10), Is.False);
                Assert.That(count, Is.EqualTo(0));
                src.Age = 10;
                Assert.That(dest.CanExecute(-20), Is.False);
                Assert.That(dest.CanExecute(20), Is.True);
                Assert.That(count, Is.EqualTo(1));
                src.Age = -20;
                Assert.That(dest.CanExecute(-30), Is.False);
                Assert.That(dest.CanExecute(30), Is.False);
                Assert.That(count, Is.EqualTo(2));
                dest.Refresh();
                dest.Execute(40);
                Assert.That(src.Name, Is.EqualTo("Done:40"));
                Assert.That(count, Is.EqualTo(4));
            }
        }
Пример #3
0
        /* ----------------------------------------------------------------- */
        ///
        /// GetOkCommand
        ///
        /// <summary>
        /// Gets the OK command.
        /// </summary>
        ///
        /* ----------------------------------------------------------------- */
        private ICommand GetOkCommand(Action <int, IEnumerable <FileItem> > callback)
        {
            var dest = new DelegateCommand(
                () => {
                Send <CloseMessage>();
                callback?.Invoke(Value.Index, Value.Files);
            },
                () => Value.Files.Count > 0
                );

            Value.Files.CollectionChanged += (s, e) => dest.Refresh();
            return(dest);
        }
Пример #4
0
 protected override void AfterPropertyChanged(string propertyName)
 {
     base.AfterPropertyChanged(propertyName);
     mAcceptCommand.Refresh();
 }
Пример #5
0
        public MainPageViewModel(IServiceProvider serviceProvider, AppViewModel appViewModel)
            : base(serviceProvider, appViewModel)
        {
            m_connectionInfoProperty           = CreateDictionaryProperty(() => ConnectionInfo, () => null);
            m_connectionInfoTaskStatusProperty = CreateDictionaryProperty(() => ConnectionInfoTaskStatus, () => TaskStatus.Created);
            m_dhcpInfoProperty                  = CreateDictionaryProperty(() => DhcpInfo, () => null);
            m_dhcpInfoTaskStatusProperty        = CreateDictionaryProperty(() => DhcpInfoTaskStatus, () => TaskStatus.Created);
            m_externalAddressProperty           = CreateDictionaryProperty(() => ExternalAddress, () => null);
            m_externalAddressTaskStatusProperty = CreateDictionaryProperty(() => ExternalAddressTaskStatus, () => TaskStatus.Created);
            m_statusProperty                  = CreateDictionaryProperty(() => Status, () => String.Empty);
            m_progressPercentProperty         = CreateDictionaryProperty(() => ProgressPercent, () => 0.0d);
            m_isScanInProgressProperty        = CreateDictionaryProperty(() => IsScanInProgress, () => false);
            m_customSelectionCommandsProperty = CreateDictionaryProperty(() => CustomSelectionCommands, () => new ObservableCollection <UICommand>());
            m_startAddressValueProperty       = CreateSettingsProperty(V1SettingsConstants.StartAddressValueKey, () => StartAddressValue, () => 0u, () => { UpdateActionBarControls(); });
            m_isStartAddressValidProperty     = CreateDictionaryProperty(() => IsStartAddressValid, () => false);
            m_endAddressValueProperty         = CreateSettingsProperty(V1SettingsConstants.EndAddressValueKey, () => EndAddressValue, () => 0u, () => { UpdateActionBarControls(); });
            m_isEndAddressValidProperty       = CreateDictionaryProperty(() => IsEndAddressValid, () => false);

            var hostInfoService = ServiceProvider.GetService <IHostInfoService>();
            var hostInfo        = hostInfoService.GetCurrentHostInfo();

            if (hostInfo == null)
            {
                Status = Strings.Status_GetHostInfoFailed;
            }
            else
            {
                var connectionInfoTask  = RunGetConnectionInfoAsync(hostInfo);
                var dhcpInfoTask        = RunGetDhcpInfoAsync(hostInfo);
                var externalAddressTask = RunGetExternalAddressAsync();

                Task.Factory.ContinueWhenAll(new[] { connectionInfoTask, dhcpInfoTask }, t =>
                {
                    if (ConnectionInfo != null)
                    {
                        if (DhcpInfo != null && DhcpInfo.DnsServerAddress != null)
                        {
                            m_dnsResolver = new UdpDnsResolver(
                                new DnsResolverOptions(),
                                new DatagramSocketFactory(),
                                new IPEndpoint(DhcpInfo.DnsServerAddress, Constants.DefaultDnsPort));
                        }

                        SetAddressValues(ConnectionInfo.Network);

                        IsScanInProgress       = false;
                        m_isScanCommandEnabled = true;
                        m_scanCommand.Refresh();
                        m_isCancelScanCommandEnabled = false;
                        m_cancelScanCommand.Refresh();
                    }
                },
                                             CancellationToken.None,
                                             TaskContinuationOptions.None,
                                             TaskScheduler.FromCurrentSynchronizationContext());
            }

            m_scanCommand = new DelegateCommand(async() =>
            {
                var scanStopwatch = new Stopwatch();
                scanStopwatch.Start();

                m_tokenSource = new CancellationTokenSource();

                AvailableServices.Clear();

                IsScanInProgress       = true;
                m_isScanCommandEnabled = false;
                m_scanCommand.Refresh();
                m_isCancelScanCommandEnabled = true;
                m_cancelScanCommand.Refresh();

                Status = Strings.Status_ScanStarted;

                var selectedAddresses = new IPAddressRange(StartAddressValue, EndAddressValue);
                var networkServices   = await GetNetworkServicesAsync();

                var index    = 0;
                var progress = (IProgress <ScanNetworkBatch>) new Progress <ScanNetworkBatch>(batch =>
                {
                    foreach (var result in batch.Results)
                    {
                        if (result.IsAvailable)
                        {
                            AvailableServices.Add(result);
                        }
                    }
                    index          += batch.Results.Count;
                    ProgressPercent = 100.0d * index / (selectedAddresses.Count * networkServices.Length);
                });

                var task = Task.Factory.StartNew(
                    arg => { Scanner.ScanNetwork(m_tokenSource.Token, m_dnsResolver, selectedAddresses, networkServices, progress); },
                    m_tokenSource.Token,
                    TaskCreationOptions.None);
                var t1 = task.ContinueWith(t =>
                {
                    IsScanInProgress       = false;
                    m_isScanCommandEnabled = true;
                    m_scanCommand.Refresh();
                    m_isCancelScanCommandEnabled = false;
                    m_cancelScanCommand.Refresh();

                    var isCancelled = m_tokenSource.Token.IsCancellationRequested;
                    if (isCancelled)
                    {
                        Status          = Strings.Status_ScanCancelled;
                        ProgressPercent = 0.0d;
                    }
                    else
                    {
                        scanStopwatch.Stop();
                        var timeSpan    = scanStopwatch.Elapsed;
                        Status          = Strings.Format_Status_ScanCompleted(timeSpan);
                        ProgressPercent = 100.0d;
                    }

                    m_tokenSource.Dispose();
                },
                                           CancellationToken.None,
                                           TaskContinuationOptions.None,
                                           TaskScheduler.FromCurrentSynchronizationContext());
            },
                                                () => m_isScanCommandEnabled);

            m_cancelScanCommand = new DelegateCommand(() =>
            {
                m_isCancelScanCommandEnabled = false;
                m_cancelScanCommand.Refresh();

                m_tokenSource.Cancel();
            },
                                                      () => m_isCancelScanCommandEnabled);

            m_showServicesCommand = new DelegateCommand(() =>
            {
                AppViewModel.NavigateToServicesPage();
            });

            m_launchUriCommand = new DelegateCommand <IPEndpoint>(endpoint =>
            {
                AppViewModel.NavigateToBrowserPage(endpoint);
            });
        }
Пример #6
0
 private void OnSelectedUserServicesCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
 {
     m_removeUserServiceCommand.Refresh();
 }
Пример #7
0
 protected override void InternalOnListChanged(ListChangedType type)
 {
     base.InternalOnListChanged(type);
     mApplyCommand.Refresh();
 }