コード例 #1
0
            public void FilteredProjectedDerivedCollectionsShouldReactToPropertyChanges()
            {
                // This differs from the FilteredDerivedCollectionsShouldReactToPropertyChanges as it tests providing a
                // non-identity selector (ie x=>x.Value).

                var a = new ReactiveVisibilityItem <string>("a", true);
                var b = new ReactiveVisibilityItem <string>("b", true);
                var c = new ReactiveVisibilityItem <string>("c", true);

                var items = new ReactiveCollection <ReactiveVisibilityItem <string> >(new[] { a, b, c })
                {
                    ChangeTrackingEnabled = true
                };

                var onlyVisible = items.CreateDerivedCollection(
                    x => x.Value.ToUpper(), // Note, not an identity function.
                    x => x.IsVisible,
                    StringComparer.Ordinal.Compare
                    );

                Assert.Equal(3, onlyVisible.Count);
                Assert.True(onlyVisible.SequenceEqual(new[] { "A", "B", "C" }));

                a.IsVisible = false;

                Assert.Equal(2, onlyVisible.Count);
                Assert.True(onlyVisible.SequenceEqual(new[] { "B", "C" }));
            }
コード例 #2
0
            public void DerivedCollectionsShouldReactToPropertyChanges()
            {
                // This differs from the FilteredDerivedCollectionsShouldReactToPropertyChanges as it tests providing a
                // non-identity selector (ie x=>x.Value).

                var foo = new ReactiveVisibilityItem <string>("Foo", true);
                var bar = new ReactiveVisibilityItem <string>("Bar", true);
                var baz = new ReactiveVisibilityItem <string>("Baz", true);

                var items = new ReactiveCollection <ReactiveVisibilityItem <string> >(new[] { foo, bar, baz })
                {
                    ChangeTrackingEnabled = true
                };

                var onlyVisible = items.CreateDerivedCollection(
                    x => new string('*', x.Value.Length), // Note, not an identity function.
                    x => x.IsVisible,
                    StringComparer.Ordinal.Compare
                    );

                Assert.Equal(3, onlyVisible.Count);
                Assert.True(onlyVisible.SequenceEqual(new[] { "***", "***", "***" }));

                foo.IsVisible = false;

                Assert.Equal(2, onlyVisible.Count);
                Assert.True(onlyVisible.SequenceEqual(new[] { "***", "***" }));
            }
コード例 #3
0
            public void FilteredDerivedCollectionsShouldReactToPropertyChanges()
            {
                // Naturally this isn't done by magic, it only works if the source implements IReactiveCollection.

                var a = new ReactiveVisibilityItem <string>("a", true);
                var b = new ReactiveVisibilityItem <string>("b", true);
                var c = new ReactiveVisibilityItem <string>("c", true);

                var items = new ReactiveCollection <ReactiveVisibilityItem <string> >(new[] { a, b, c })
                {
                    ChangeTrackingEnabled = true
                };

                var onlyVisible = items.CreateDerivedCollection(
                    x => x.Value,
                    x => x.IsVisible,
                    StringComparer.Ordinal.Compare
                    );

                var onlyNonVisible = items.CreateDerivedCollection(
                    x => x.Value,
                    x => !x.IsVisible,
                    StringComparer.Ordinal.Compare
                    );

                var onlVisibleStartingWithB = items.CreateDerivedCollection(
                    x => x.Value,
                    x => x.IsVisible && x.Value.StartsWith("b"),
                    StringComparer.Ordinal.Compare
                    );

                Assert.Equal(3, onlyVisible.Count);
                Assert.Equal(0, onlyNonVisible.Count);
                Assert.Equal(1, onlVisibleStartingWithB.Count);

                a.IsVisible = false;

                Assert.Equal(2, onlyVisible.Count);
                Assert.Equal(1, onlyNonVisible.Count);
                Assert.Equal(1, onlVisibleStartingWithB.Count);

                b.Value = "D";

                Assert.Equal(0, onlVisibleStartingWithB.Count);
            }
コード例 #4
0
            public void DerivedCollectionShouldHandleRemovesOfFilteredItems()
            {
                var a = new ReactiveVisibilityItem <string>("A", true);
                var b = new ReactiveVisibilityItem <string>("B", true);
                var c = new ReactiveVisibilityItem <string>("C", true);
                var d = new ReactiveVisibilityItem <string>("D", false);
                var e = new ReactiveVisibilityItem <string>("E", true);

                var items = new ReactiveCollection <ReactiveVisibilityItem <string> >(new[] { a, b, c, d, e })
                {
                    ChangeTrackingEnabled = true
                };

                var onlyVisible = items.CreateDerivedCollection(
                    x => x.Value,
                    x => x.IsVisible,
                    OrderedComparer <string> .OrderByDescending(x => x).Compare
                    );

                Assert.True(onlyVisible.SequenceEqual(new[] { "E", "C", "B", "A" }, StringComparer.Ordinal));
                Assert.Equal(4, onlyVisible.Count);

                // Removal of an item from the source collection that's filtered in the derived collection should
                // have no effect on the derived.
                items.Remove(d);

                Assert.True(onlyVisible.SequenceEqual(new[] { "E", "C", "B", "A" }, StringComparer.Ordinal));
                Assert.Equal(4, onlyVisible.Count);

                c.IsVisible = false;
                Assert.Equal(3, onlyVisible.Count);
                Assert.True(onlyVisible.SequenceEqual(new[] { "E", "B", "A" }, StringComparer.Ordinal));

                items.Remove(c);
                Assert.Equal(3, onlyVisible.Count);
                Assert.True(onlyVisible.SequenceEqual(new[] { "E", "B", "A" }, StringComparer.Ordinal));

                items.Remove(b);
                Assert.Equal(2, onlyVisible.Count);
                Assert.True(onlyVisible.SequenceEqual(new[] { "E", "A" }, StringComparer.Ordinal));
            }