Example #1
0
        public void TestSmoke()
        {
            int changeCount = 0;
            ObservableCollectionWatcher <Sample> watcher = new ObservableCollectionWatcher <Sample>(() => changeCount++);

            ObservableCollection <Sample> collection = new ObservableCollection <Sample>();

            watcher.SetCollection(collection);
            Assert.That(changeCount, Is.EqualTo(0));

            Sample sample1 = new Sample();

            collection.Add(sample1);
            Assert.That(changeCount, Is.EqualTo(0));

            Sample sample2 = new Sample();

            collection.Add(sample2);
            Assert.That(changeCount, Is.EqualTo(0));

            sample1.FirePropertyChanged();
            Assert.That(changeCount, Is.EqualTo(1));

            sample2.FirePropertyChanged();
            Assert.That(changeCount, Is.EqualTo(2));

            collection.Remove(sample1);
            sample1.FirePropertyChanged();
            Assert.That(changeCount, Is.EqualTo(2));

            Sample sample3 = new Sample();

            collection[0] = sample3;
            Assert.That(changeCount, Is.EqualTo(2));

            sample1.FirePropertyChanged();
            sample2.FirePropertyChanged();
            Assert.That(changeCount, Is.EqualTo(2));

            sample3.FirePropertyChanged();
            Assert.That(changeCount, Is.EqualTo(3));

            watcher.SetCollection(null);
            Assert.That(changeCount, Is.EqualTo(3));
        }
Example #2
0
        public DockerContainerListView()
        {
            XamlReader.Load(this);

            //todo: workaround for bug in Eto.Forms (probably related to https://github.com/picoe/Eto/issues/515)
            containersCollectionWatcher = new ObservableCollectionWatcher <DockerContainerViewModel>(ContainersGridView.Invalidate);

            DataContextChanged += (sender, args) =>
            {
                DockerContainerListViewModel viewModel = DataContext as DockerContainerListViewModel;
                containersCollectionWatcher.SetCollection(viewModel?.Containers);
            };

            IdCell.Binding      = Binding.Property <DockerContainerViewModel, string>(c => c.Id);
            ImageCell.Binding   = Binding.Property <DockerContainerViewModel, string>(c => c.Image);
            ImageIdCell.Binding = Binding.Property <DockerContainerViewModel, string>(c => c.ImageId);
            CreatedCell.Binding = Binding.Property <DockerContainerViewModel, string>(c => c.Created);
            StateCell.Binding   = Binding.Property <DockerContainerViewModel, string>(c => c.State);
            ContainersGridView.SelectionChanged += ContainersGridViewOnSelectionChanged;
        }
        public DockerImageListView()
        {
            XamlReader.Load(this);

            //todo: workaround for bug in Eto.Forms (probably related to https://github.com/picoe/Eto/issues/515)
            containersCollectionWatcher = new ObservableCollectionWatcher <DockerImageViewModel>(ImagesGridView.Invalidate);

            DataContextChanged += (sender, args) =>
            {
                DockerImageListViewModel viewModel = DataContext as DockerImageListViewModel;
                containersCollectionWatcher.SetCollection(viewModel?.Images);
            };

            IdCell.Binding                   = Binding.Property <DockerImageViewModel, string>(c => c.Id);
            RepoTagsCell.Binding             = Binding.Property <DockerImageViewModel, string>(c => c.RepoTagsAsText);
            RepoDigestsCell.Binding          = Binding.Property <DockerImageViewModel, string>(c => c.RepoDigestsAsText);
            CreatedCell.Binding              = Binding.Property <DockerImageViewModel, string>(c => c.CreatedAsText);
            SizeCell.Binding                 = Binding.Property <DockerImageViewModel, string>(c => c.SizeAsText);
            VirtualSizeCell.Binding          = Binding.Property <DockerImageViewModel, string>(c => c.VirtualSizeAsText);
            ImagesGridView.SelectionChanged += ImagesGridViewOnSelectionChanged;
        }
        public AccountImportQueueRecordsEditViewModel()
        {
            encodings = new ObservableCollection<Encoding>(new[] { Encoding.UTF8, Encoding.ASCII, Encoding.GetEncoding(1252), Encoding.Unicode });
            Encodings = CollectionViewSource.GetDefaultView(encodings);
            Encodings.SortDescriptions.Add(new SortDescription(nameof(Encoding.WebName), ListSortDirection.Ascending));
            SelectedEncoding = encodings.FirstOrDefault();

            loadTypes = new ObservableCollection<LoadType>(new[] { new LoadType("Для анализа", true), new LoadType("Обычная загрузка", false) });
            LoadTypes = CollectionViewSource.GetDefaultView(loadTypes);
            SelectedLoadType = loadTypes.FirstOrDefault();

            localCollection = new ObservableCollectionWatcher<ImportQueueRecord>((x, y) => x.Id == y.Id);
            ImportQueueRecords = CollectionViewSource.GetDefaultView(localCollection);
            //ImportQueueRecords.CollectionChanged += ImportQueueRecords_CollectionChanged;
            ImportQueueRecords.SortDescriptions.Add(new SortDescription(nameof(ImportQueueRecord.CreatedDate), ListSortDirection.Descending));
            setFilterTimer = new FilterTimer<DateTimeFilter>(TimeSpan.FromMilliseconds(500), (filter) =>
            {
                RunUnderDispatcher(() =>
                {
                    if (this.AccountsImportQueueRecordsComponent != null)
                    {
                        localCollection.Clear();
                        AccountsImportQueueRecordsComponent.From = filter.From;
                        AccountsImportQueueRecordsComponent.To = filter.To;
                    }
                });
            });
            InsertCommand = new DelegateCommand((o) => InsertNew());
            DeleteCommand = new DelegateCommand((o) => DeleteFromCollection(o as ImportQueueRecord));
        }
 public AccountAdditionalColumnsEditViewModel()
 {
     localCollection = new ObservableCollectionWatcher<AccountDataRecordAdditionalColumn>((x, y) => x.Id == y.Id);
     AccountAdditionalColumns = CollectionViewSource.GetDefaultView(localCollection);
     AccountAdditionalColumns.CollectionChanged += AccountAdditionalColumns_CollectionChanged;
     RowEditEndingCommand = new DelegateCommand(o => RowEditEnding(o as System.Windows.Controls.DataGridRowEditEndingEventArgs));
 }
 public AccountPhoneMarksEditViewModel()
 {
     localCollection = new ObservableCollectionWatcher<AccountPhoneMark>((x, y) => x.Id == y.Id);
     AccountPhoneMarks = CollectionViewSource.GetDefaultView(localCollection);
     AccountPhoneMarks.CollectionChanged += AccountPhoneMarks_CollectionChanged;
     RowEditEndingCommand = new DelegateCommand(o => RowEditEnding(o as System.Windows.Controls.DataGridRowEditEndingEventArgs));
     setFilterTimer = new FilterTimer<string>(TimeSpan.FromMilliseconds(200), (filter) =>
     {
         RunUnderDispatcher(() =>
         {
             if (this.AccountsPhoneMarksComponent != null)
             {
                 localCollection.Clear();
                 AccountsPhoneMarksComponent.Filter = filter;
             }
         });
     });
 }