public void ItemsSourceChangedNonGenericShouldBeInvokedWhenItemsSourceChanged()
        {
            ThreadManager.IsUiThread = true;
            bool isItemsSourceChanged = false;
            var model = new GridModel { Name = "test" };
            var listItems = new List<GridModel> { model };

            IGridViewModel gridViewModel = GetViewModel<GridViewModel<GridModel>>();
            gridViewModel.ItemsSourceChanged += (sender, data) =>
            {
                if (isItemsSourceChanged)
                    throw new InvalidOperationException();
                isItemsSourceChanged = true;
                gridViewModel.ItemsSource.ShouldEqual(data.Value);
            };
            gridViewModel.UpdateItemsSource(listItems);
            isItemsSourceChanged.ShouldBeTrue();
        }
        public void SelectedItemChangedGenericShouldBeInvokedWhenSelectedItemChanged()
        {
            ThreadManager.IsUiThread = true;
            bool isFocusedRowChanged = false;
            var model = new GridModel { Name = "test" };
            var listItems = new List<GridModel> { model };

            var gridViewModel = GetViewModel<GridViewModel<GridModel>>();
            gridViewModel.SelectedItemChanged += (sender, args) =>
                                                 {
                                                     if (isFocusedRowChanged)
                                                         throw new InvalidOperationException();
                                                     isFocusedRowChanged = true;
                                                     args.OldValue.ShouldBeNull();
                                                     args.NewValue.ShouldEqual(model);
                                                 };
            gridViewModel.UpdateItemsSource(listItems);
            gridViewModel.SelectedItem = model;
            isFocusedRowChanged.ShouldBeTrue();
        }
        public void SetOriginalItemsSourceShouldGetDataFromPrevious()
        {
            var model = new GridModel { Name = "test" };
            var listItems = new List<GridModel> { model };
            var viewModel = GetViewModel<GridViewModel<GridModel>>();
            viewModel.UpdateItemsSource(listItems);

            var newItemsSource = new ObservableCollection<GridModel>();
            viewModel.SetOriginalItemsSource(newItemsSource);
            newItemsSource.SequenceEqual(listItems).ShouldBeTrue();
        }
        public void InternalItemsSourceEventsTest()
        {
            var model = new GridModel { Name = "test" };
            var listItems = new List<GridModel> { model };
            var viewModel = GetViewModel<GridViewModelMock>();

            viewModel.UpdateItemsSource(listItems);
            viewModel.ItemsSourceChangingValue.ShouldEqual(listItems);
            viewModel.ItemsSource.ShouldBeEmpty();

            viewModel.ItemsSourceChangingResult = listItems;
            viewModel.UpdateItemsSource(listItems);
            viewModel.ItemsSourceChangingValue.ShouldEqual(listItems);
            viewModel.ItemsSourceChangedValue.ShouldEqual(viewModel.ItemsSource);
            viewModel.ItemsSource.ShouldNotBeNull();
            viewModel.ItemsSource.All(listItems.Contains).ShouldBeTrue();
        }
        public void InternalSelectedRowEventTest()
        {
            var model = new GridModel { Name = "test" };
            var listItems = new List<GridModel> { model };
            var viewModel = GetViewModel<GridViewModelMock>();
            viewModel.ItemsSourceChangingResult = listItems;

            viewModel.UpdateItemsSource(listItems);
            viewModel.SelectedItem = model;
            viewModel.SelectedItemChanging.ShouldEqual(model);
            viewModel.SelectedItem.ShouldBeNull();

            viewModel.SelectedItemChangingResult = model;
            viewModel.SelectedItem = model;
            viewModel.SelectedItem.ShouldEqual(model);

            viewModel.SelectedItemChangedOld.ShouldBeNull();
            viewModel.SelectedItemChangedNew.ShouldEqual(model);
        }
        public void FilterShouldFilterRecords()
        {
            var model = new GridModel { Name = "test" };
            var model1 = new GridModel { Name = "test1" };
            var listItems = new List<GridModel> { model, model1 };

            var gridViewModel = GetViewModel<GridViewModel<GridModel>>();

            gridViewModel.Filter = item => item.Name == string.Empty;
            gridViewModel.UpdateItemsSource(listItems);
            gridViewModel.ItemsSource.Contains(model).ShouldBeFalse();
            gridViewModel.ItemsSource.Contains(model1).ShouldBeFalse();

            gridViewModel.Filter = item => true;
            gridViewModel.ItemsSource.Contains(model).ShouldBeTrue();
            gridViewModel.ItemsSource.Contains(model1).ShouldBeTrue();

            gridViewModel.Filter = item => item.Name == "test";
            gridViewModel.ItemsSource.Contains(model).ShouldBeTrue();
            gridViewModel.ItemsSource.Contains(model1).ShouldBeFalse();
        }
        public void WhenItemsSourceChangedSelectedItemShouldBeSetToNullTest()
        {
            var model = new GridModel { Name = "test" };
            var listItems = new List<GridModel> { model };
            var gridViewModel = GetViewModel<GridViewModel<GridModel>>();

            gridViewModel.UpdateItemsSource(listItems);
            gridViewModel.SelectedItem = model;

            gridViewModel.SelectedItem.ShouldEqual(model);
            gridViewModel.UpdateItemsSource(null);
            gridViewModel.SelectedItem.ShouldBeNull();
        }