Ejemplo n.º 1
0
        public void ViewModelKeyTest()
        {
            ViewInjectionService  service  = new ViewInjectionService();
            IViewInjectionService iService = service;
            ContentControl        target   = new ContentControl();

            Interaction.GetBehaviors(target).Add(service);
            object vm1 = new object();
            object vm2 = new object();

            Window.Content = target;
            EnqueueShowWindow();
            EnqueueCallback(() => {
                iService.Inject(null, null);
                iService.Inject(null, vm1);
                Assert.AreEqual(1, iService.ViewModels.Count());
                Assert.AreSame(vm1, iService.ViewModels.ElementAt(0));
                Assert.AreEqual(vm1, iService.GetKey(vm1));
                Assert.AreSame(vm1, iService.GetViewModel(vm1));

                AssertHelper.AssertThrows <InvalidOperationException>(() => iService.Inject(null, vm1),
                                                                      x => Assert.AreEqual("A view model with the same key already exists in the ViewInjectionService region.", x.Message));
                service.RegionName = "Test";
                AssertHelper.AssertThrows <InvalidOperationException>(() => iService.Inject(null, vm1),
                                                                      x => Assert.AreEqual("A view model with the same key already exists in the Test region.", x.Message));

                iService.Inject("New", vm2);
                Assert.AreEqual(2, iService.ViewModels.Count());
                Assert.AreSame(vm2, iService.ViewModels.ElementAt(1));
                Assert.AreEqual("New", iService.GetKey(vm2));
                Assert.AreSame(vm2, iService.GetViewModel("New"));

                iService.Remove(vm1);
                Assert.AreEqual(1, iService.ViewModels.Count());
                iService.Remove(vm2);
                Assert.AreEqual(0, iService.ViewModels.Count());
            });
            EnqueueTestComplete();
        }
Ejemplo n.º 2
0
        public void RegisterUnregister()
        {
            Grid container = new Grid();

            Window.Content = container;

            ViewInjectionService service1 = new ViewInjectionService()
            {
                RegionName = "region1"
            };
            ContentPresenter target1 = new ContentPresenter();

            container.Children.Add(target1);
            Interactivity.Interaction.GetBehaviors(target1).Add(service1);

            ViewInjectionService service2 = new ViewInjectionService()
            {
                RegionName = "region2"
            };
            ContentPresenter target2 = new ContentPresenter();

            container.Children.Add(target2);
            Interactivity.Interaction.GetBehaviors(target2).Add(service2);

            EnqueueShowWindow();
            EnqueueCallback(() => {
                Assert.AreSame(service1, ViewInjectionManager.Default.GetService("region1"));
                Assert.AreSame(service2, ViewInjectionManager.Default.GetService("region2"));
                Interactivity.Interaction.GetBehaviors(target1).Remove(service1);
                container.Children.Remove(target2);
            });
            EnqueueWindowUpdateLayout();
            EnqueueCallback(() => {
                Assert.IsNull(ViewInjectionManager.Default.GetService("region1"));
                Assert.IsNull(ViewInjectionManager.Default.GetService("region2"));
            });
            EnqueueTestComplete();
        }
Ejemplo n.º 3
0
        WeakReference[] PersistentMode_InjectRemove_Core(Func <object> vmFactory, object vm)
        {
            Grid container = new Grid();

            Window.Content = container;

            ViewInjectionManager.PersistentManager.Inject("region", null, vmFactory, typeof(TestInjectionView1));

            ViewInjectionService service1 = new ViewInjectionService()
            {
                RegionName = "region", ViewInjectionManager = ViewInjectionManager.PersistentManager
            };
            ContentPresenter target1 = new ContentPresenter();

            container.Children.Add(target1);
            Interactivity.Interaction.GetBehaviors(target1).Add(service1);

            ViewInjectionService service2 = new ViewInjectionService()
            {
                RegionName = "region", ViewInjectionManager = ViewInjectionManager.PersistentManager
            };
            ItemsControl target2 = new ItemsControl();

            EnqueueShowWindow();
            EnqueueCallback(() => {
                Assert.AreSame(vm, target1.Content);
                Assert.AreEqual(1, ((IViewInjectionService)service1).ViewModels.Count());
                container.Children.Remove(target1);
            });
            EnqueueWindowUpdateLayout();
            EnqueueCallback(() => {
                Assert.AreEqual(0, ((IViewInjectionService)service1).ViewModels.Count());
                container.Children.Add(target1);
            });
            EnqueueWindowUpdateLayout();
            EnqueueCallback(() => {
                Assert.AreSame(vm, target1.Content);
                Assert.AreEqual(1, ((IViewInjectionService)service1).ViewModels.Count());
                container.Children.Remove(target1);
            });
            EnqueueWindowUpdateLayout();
            EnqueueCallback(() => {
                Interactivity.Interaction.GetBehaviors(target2).Add(service2);
                container.Children.Add(target2);
            });
            EnqueueWindowUpdateLayout();
            EnqueueCallback(() => {
                Assert.AreSame(vm, target2.Items[0]);
                Assert.AreEqual(0, ((IViewInjectionService)service1).ViewModels.Count());
                Assert.AreEqual(1, ((IViewInjectionService)service2).ViewModels.Count());
                Interaction.GetBehaviors(target1).Remove(service1);
                Interaction.GetBehaviors(target2).Remove(service2);
            });
            EnqueueWindowUpdateLayout();
            EnqueueCallback(() => {
                service1.ViewInjectionManager = null;
                service2.ViewInjectionManager = null;
                Assert.AreEqual(0, ((IViewInjectionService)service1).ViewModels.Count());
                Assert.AreEqual(0, ((IViewInjectionService)service2).ViewModels.Count());
            });
            EnqueueTestComplete();
            WeakReference target1Reference  = new WeakReference(target1);
            WeakReference target2Reference  = new WeakReference(target2);
            WeakReference service1Reference = new WeakReference(service1);
            WeakReference service2Reference = new WeakReference(service2);

            return(new WeakReference[] { target1Reference, target2Reference, service1Reference, service2Reference });
        }
Ejemplo n.º 4
0
        WeakReference[] NavigatedEvent_NavigatedAwayEvent_Core()
        {
            TabControl target = new TabControl();
            VM         vm1    = new VM();
            VM         vm2    = new VM();
            VM         vm3    = new VM();

            ViewInjectionManager.Default.Inject("region1", null, () => vm1);
            ViewInjectionManager.Default.Inject("region1", null, () => vm2);
            ViewInjectionManager.Default.Navigate("region1", vm2);
            ViewInjectionService service = new ViewInjectionService()
            {
                RegionName = "region1"
            };

            Interaction.GetBehaviors(target).Add(service);
            Window.Content = target;
            EnqueueShowWindow();
            EnqueueCallback(() => {
                Assert.AreEqual(1, vm1.NavigatedCount);
                Assert.AreEqual(1, vm1.NavigatedAwayCount);
                Assert.AreEqual(1, vm2.NavigatedCount);
                Assert.AreEqual(0, vm2.NavigatedAwayCount);
                Assert.AreEqual(0, vm3.NavigatedCount);
                Assert.AreEqual(0, vm3.NavigatedAwayCount);

                ViewInjectionManager.Default.Navigate("region1", vm3);
                ViewInjectionManager.Default.Inject("region1", null, () => vm3);
            });
            EnqueueWindowUpdateLayout();
            EnqueueCallback(() => {
                Assert.AreEqual(1, vm1.NavigatedCount);
                Assert.AreEqual(1, vm1.NavigatedAwayCount);
                Assert.AreEqual(1, vm2.NavigatedCount);
                Assert.AreEqual(1, vm2.NavigatedAwayCount);
                Assert.AreEqual(1, vm3.NavigatedCount);
                Assert.AreEqual(0, vm3.NavigatedAwayCount);
            });
            EnqueueWindowUpdateLayout();
            EnqueueCallback(() => {
                target.SelectedItem = vm1;
            });
            EnqueueWindowUpdateLayout();
            EnqueueCallback(() => {
                Assert.AreEqual(2, vm1.NavigatedCount);
                Assert.AreEqual(1, vm1.NavigatedAwayCount);
                Assert.AreEqual(1, vm2.NavigatedCount);
                Assert.AreEqual(1, vm2.NavigatedAwayCount);
                Assert.AreEqual(1, vm3.NavigatedCount);
                Assert.AreEqual(1, vm3.NavigatedAwayCount);
            });
            EnqueueTestComplete();

            WeakReference targetReference  = new WeakReference(target);
            WeakReference serviceReference = new WeakReference(service);
            WeakReference vm1Reference     = new WeakReference(vm1);
            WeakReference vm2Reference     = new WeakReference(vm2);
            WeakReference vm3Reference     = new WeakReference(vm3);

            Interaction.GetBehaviors(target).Remove(service);
            Window.Content = null;
            return(new WeakReference[] { targetReference, serviceReference, vm1Reference, vm2Reference, vm3Reference });
        }
Ejemplo n.º 5
0
        WeakReference[] InjectRemove_Core()
        {
            Grid container = new Grid();

            Window.Content = container;

            object vm1 = null;
            object vm2 = null;
            object vm3 = null;

            ViewInjectionManager.Default.Inject("region1", null, () => vm1 = new object(), "TestInjectionView1");
            ViewInjectionManager.Default.Inject("region2", null, () => vm2 = new object());

            ViewInjectionService service1 = new ViewInjectionService()
            {
                RegionName = "region1"
            };
            ContentPresenter target1 = new ContentPresenter();

            container.Children.Add(target1);
            Interactivity.Interaction.GetBehaviors(target1).Add(service1);

            ViewInjectionService service2 = new ViewInjectionService()
            {
                RegionName = "region2"
            };
            ContentPresenter target2 = new ContentPresenter();

            container.Children.Add(target2);
            Interactivity.Interaction.GetBehaviors(target2).Add(service2);

            Assert.IsNull(vm1);
            Assert.IsNull(vm2);
            Assert.IsNull(vm3);

            EnqueueShowWindow();
            EnqueueCallback(() => {
                Assert.AreSame(vm1, target1.Content);
                Assert.AreSame(vm2, target2.Content);

                ViewInjectionManager.Default.Inject("region2", null, () => vm3 = new object(), typeof(TestInjectionView1));
                Assert.AreSame(vm1, target1.Content);
                Assert.AreSame(vm2, target2.Content);
                ViewInjectionManager.Default.Navigate("region2", vm3);
                Assert.AreSame(vm3, target2.Content);
                Assert.AreEqual(2, ((IViewInjectionService)service2).ViewModels.Count());
            });
            EnqueueWindowUpdateLayout();
            EnqueueCallback(() => {
                ViewInjectionManager.Default.Remove("region1", vm1);
                ViewInjectionManager.Default.Remove("region2", vm2);
                ViewInjectionManager.Default.Remove("region2", vm3);
            });
            EnqueueWindowUpdateLayout();
            EnqueueCallback(() => {
                Assert.AreEqual(0, ViewInjectionManager.Default.GetService("region1").ViewModels.Count());
                Assert.AreEqual(0, ViewInjectionManager.Default.GetService("region2").ViewModels.Count());
            });
            EnqueueTestComplete();


            WeakReference target1Reference  = new WeakReference(target1);
            WeakReference target2Reference  = new WeakReference(target2);
            WeakReference service1Reference = new WeakReference(service1);
            WeakReference service2Reference = new WeakReference(service2);
            WeakReference vm1Reference      = new WeakReference(vm1);
            WeakReference vm2Reference      = new WeakReference(vm2);
            WeakReference vm3Reference      = new WeakReference(vm3);

            Interaction.GetBehaviors(target1).Remove(service1);
            Interaction.GetBehaviors(target2).Remove(service2);
            Window.Content = null;
            return(new WeakReference[] { target1Reference, target2Reference, service1Reference, service2Reference, vm1Reference, vm2Reference, vm3Reference });
        }