public ProductItemsViewModel(
            IProductsProvider productsProvider,
            IProductsSearcher productsSearcher,
            IOrderBuilder orderBuilder,
            IPageNavigator pageNavigator)
        {
            Contract.Assert(productsProvider != null);
            Contract.Assert(orderBuilder != null);
            Contract.Assert(pageNavigator != null);

            _productsProvider = productsProvider;
            _productsSearcher = productsSearcher;
            _orderBuilder = orderBuilder;
            _pageNavigator = pageNavigator;
            SearchCommand = new LambdaCommand(
                parameter =>
                {
                    var searchResult = _productsSearcher.Search(SearchQuery);
                    Products = searchResult.Select(CreateProductViewModel);
                });

            GotoOrderCommand = new LambdaCommand(
                _ =>
                {
                    _pageNavigator.NavigateToOrderPage(new OrderViewModel(_orderBuilder.GetOrder(), _pageNavigator));
                });

            InitializeProducts();
        }