Powiąż wartość trasy z właściwością obiektu będącego częścią modelu widoku

Mam następującą trasę:

            routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

i używam ViewModel:

namespace MvcApplication1.Models
{
    public class ProductViewModel
    {

        public ProductViewModel()
        {
            ProductDetail = new ProductInfo();
        }

        public ProductInfo ProductDetail { get; set; }

    }

    public class ProductInfo
    {
        public string Name { get; set; }
        public int ProductID { get; set; }
    }

}

Potrzebuję sposobu powiązania identyfikatora parametru trasy do Model.ProductDetail.ProductID.

/ Produkty / Wyświetlacz / 2 powinny prowadzić do:

Model.ProductDetail.ProductID == 2

Wiem, że wygląda to trochę dziwnie: byłoby znacznie prostsze, gdyby mój ViewModel był tylko

klasa publiczna ProductViewModel {public int Id {get; set;}}

Do obsługi części cząstkowych wolę używać agregacji. Naprawdę nie mogę mieć identyfikatora w głównej klasie ViewModel.

Jestem dość niepewny, że muszę zaimplementować własny modelBinder, ale nie widzę, gdzie powinienem implementować własne zasady.

Jak mogę zmapować parametr trasy „id” do właściwości Model.ProductDetail.ProductID?

EDYTOWAĆ:

Oto jak to się robi -

    public class ProductModelBinder: DefaultModelBinder
{
    protected override void BindProperty(
        ControllerContext controllerContext,
        ModelBindingContext bindingContext, 
        System.ComponentModel.PropertyDescriptor propertyDescriptor
        )    {
            if (bindingContext.ModelType == typeof(ProductViewModel)
            && String.Compare(propertyDescriptor.Name, "ProductDetail", true) == 0)     
            {         
                int id = int.Parse((string)controllerContext.RouteData.Values["id"]);
                ProductViewModel productView = bindingContext.Model as ProductViewModel;
                productView.ProductDetail.ProductID = id;           
                return;       
         }       
        base.BindProperty(controllerContext, bindingContext, propertyDescriptor);    }
}

questionAnswers(1)

yourAnswerToTheQuestion