示例#1
0
        public void When_ContainerStyleSet()
        {
            var count = 0;
            var panel = new StackPanel();

            var source = new ObservableVector <int>()
            {
                1, 2, 3
            };

            var SUT = new ItemsControl()
            {
                ItemsPanelRoot         = panel,
                ItemContainerStyle     = BuildBasicContainerStyle(),
                InternalItemsPanelRoot = panel,
                ItemTemplate           = new DataTemplate(() =>
                {
                    count++;
                    return(new Border());
                })
            };

            SUT.ApplyTemplate();

            Assert.AreEqual(0, count);

            SUT.ItemsSource = source;
            Assert.AreEqual(3, count);

            source.Add(4);
            Assert.AreEqual(4, count);

            source.Remove(1);
            Assert.AreEqual(4, count);
        }
示例#2
0
        public void When_ObservableVectorChanged()
        {
            var count = 0;
            var panel = new StackPanel();

            var source = new ObservableVector <int>()
            {
                1, 2, 3
            };

            var SUT = new ItemsControl()
            {
                ItemsPanelRoot         = panel,
                InternalItemsPanelRoot = panel,
                ItemTemplate           = new DataTemplate(() =>
                {
                    count++;
                    return(new Border());
                })
            };

            Assert.AreEqual(0, count);

            SUT.ItemsSource = source;
            Assert.AreEqual(3, count);

            source.Add(4);
            Assert.AreEqual(7, count);

            source.Remove(1);
            Assert.AreEqual(13, count);
        }
示例#3
0
        public void When_Item_Added_VectorChanged()
        {
            var vector = new ObservableVector <string>()
            {
                "one", "two", "three"
            };
            var count = 0;

            vector.VectorChanged += (o, e) =>
            {
                count++;
                switch (count)
                {
                case 1:
                    Assert.AreEqual(3u, e.Index);
                    Assert.AreEqual(CollectionChange.ItemInserted, e.CollectionChange);
                    break;

                case 2:
                    Assert.AreEqual(0u, e.Index);
                    Assert.AreEqual(CollectionChange.ItemInserted, e.CollectionChange);
                    break;

                default:
                    Assert.Fail("Raised too many times");
                    break;
                }
            };

            vector.Add("four");
            vector.Insert(0, "zero");
        }
        public ObservableVectorDemoViewModel()
        {
            Vector = new ObservableVector <object, List <object> >();
            for (int i = 0; i < 10; i++)
            {
                Vector.Add(string.Format("Base Item: {0}", i));
            }

            AddNewItemsCommand = new DelegateCommand(() =>
            {
                int count = rnd.Next(5, 20);
                for (int i = 0; i < count; i++)
                {
                    Vector.Add(string.Format("{1} {0}", i, DateTime.Now.TimeOfDay));
                }
            });
        }
示例#5
0
        public CollectionView(IEnumerable collection, bool isGrouped)
        {
            _collection = collection;
            _isGrouped  = isGrouped;

            if (isGrouped)
            {
                var collectionGroups = new ObservableVector <object>();
                foreach (var group in collection)
                {
                    collectionGroups.Add(new CollectionViewGroup(group));
                }

                CollectionGroups = collectionGroups;

                if (_collection is INotifyCollectionChanged observableCollection)
                {
                    observableCollection.CollectionChanged += OnCollectionChangedUpdateGroups;
                }
            }
        }
示例#6
0
        public void When_ObservableVectorStringChanged()
        {
            var count = 0;
            var panel = new StackPanel();

            var source = new ObservableVector <string>()
            {
                "1", "2", "3"
            };

            var SUT = new ItemsControl()
            {
                ItemsPanelRoot         = panel,
                InternalItemsPanelRoot = panel,
                ItemTemplate           = new DataTemplate(() =>
                {
                    count++;
                    return(new Border());
                })
            };

            Assert.AreEqual(0, count);

            SUT.ItemsSource = source;
            Assert.AreEqual(3, count);

            source.Add("4");
            Assert.AreEqual(4, count);

            source.Remove("1");
            Assert.AreEqual(4, count);

            source[0] = "5";
            // Data template is not recreated because of pooling
            Assert.AreEqual(4, count);
        }
示例#7
0
        public void When_ObservableVectorIntChanged()
        {
            var count = 0;
            var panel = new StackPanel();

            var source = new ObservableVector <int>()
            {
                1, 2, 3
            };

            var SUT = new ItemsControl()
            {
                ItemsPanelRoot         = panel,
                InternalItemsPanelRoot = panel,
                ItemTemplate           = new DataTemplate(() =>
                {
                    count++;
                    return(new Border());
                })
            };

            Assert.AreEqual(0, count);

            SUT.ItemsSource = source;
            Assert.AreEqual(3, count);

            source.Add(4);
            Assert.AreEqual(4, count);

            source.Remove(1);
            Assert.AreEqual(4, count);

            source[0] = 5;
            // Data template is not recreated because of pooling
            Assert.AreEqual(FrameworkTemplatePool.IsPoolingEnabled ? 4 : 5, count);
        }
示例#8
0
        public void When_ObservableVectorStringChanged()
        {
            var count          = 0;
            var containerCount = 0;
            var panel          = new StackPanel();

            panel.ForceLoaded();

            var source = new ObservableVector <string>()
            {
                "1", "2", "3"
            };

            Style BuildContainerStyle() =>
            new Style(typeof(Windows.UI.Xaml.Controls.ListViewItem))
            {
                Setters =
                {
                    new Setter <ContentControl>("Template",                                t =>
                                                t.Template = Funcs.Create(() => {
                        containerCount++;
                        return(new Grid
                        {
                            Children =
                            {
                                new ContentPresenter()
                                .Apply(p => {
                                    p.SetBinding(ContentPresenter.ContentTemplateProperty, new Binding()
                                    {
                                        Path = "ContentTemplate",                          RelativeSource = RelativeSource.TemplatedParent
                                    });
                                    p.SetBinding(ContentPresenter.ContentProperty,         new Binding()
                                    {
                                        Path = "Content",                                  RelativeSource = RelativeSource.TemplatedParent
                                    });
                                })
                            }
                        });
                    })
                                                )
                }
            };

            var SUT = new ListView()
            {
                ItemsPanelRoot         = panel,
                InternalItemsPanelRoot = panel,
                ItemContainerStyle     = BuildContainerStyle(),
                ItemTemplate           = new DataTemplate(() =>
                {
                    count++;
                    return(new Border());
                })
            };

            Assert.AreEqual(0, count);
            Assert.AreEqual(0, containerCount);
            Assert.AreEqual(0, containerCount);

            SUT.ItemsSource = source;
            Assert.AreEqual(3, count);
            Assert.AreEqual(3, containerCount);
            Assert.AreEqual(3, containerCount);

            source.Add("4");
            Assert.AreEqual(4, count);
            Assert.AreEqual(4, containerCount);
            Assert.AreEqual(4, containerCount);

            source.Remove("1");
            Assert.AreEqual(4, count);
            Assert.AreEqual(4, containerCount);
            Assert.AreEqual(4, containerCount);

            source[0] = "5";
            // Data template is not recreated because of pooling
            Assert.AreEqual(4, count);
            // The item container style is reapplied (not cached)
            Assert.AreEqual(5, containerCount);
        }
示例#9
0
        public void Add_CollectionChanged()
        {
            List<int> collection = new List<int>(new int[] { 1, 3, 7, 10, 42 });
            ObservableVector<int> vector = new ObservableVector<int>(collection);

            bool vectorChanged = false;
            vector.CollectionChanged += (sender, e) => { if (e.Action == NotifyCollectionChangedAction.Add && e.NewStartingIndex == 5 && (int)e.NewItems[0] == 100) { vectorChanged = true; } };

            vector.Add(100);

            Assert.AreEqual(true, vectorChanged);
        }
示例#10
0
        public void Add_PropertyChanged_Indexer()
        {
            List<int> collection = new List<int>(new int[] { 1, 3, 7, 10, 42 });
            ObservableVector<int> vector = new ObservableVector<int>(collection);

            bool propertyChanged = false;
            vector.PropertyChanged += (sender, e) => { if (e.PropertyName == "Item[]") { propertyChanged = true; } };

            vector.Add(100);

            Assert.AreEqual(true, propertyChanged);
        }
示例#11
0
        public void Add_AddsItem()
        {
            List<int> collection = new List<int>(new int[] { 1, 3, 7, 10, 42 });
            ObservableVector<int> vector = new ObservableVector<int>(collection);

            vector.Add(100);

            CollectionAssert.AreEqual(new int[] { 1, 3, 7, 10, 42, 100 }, vector.ToArray());
        }