Como criar uma página mestre fortemente tipada usando um controlador base no ASP.NET MVC

Seguindo o NerdDinners exemplo, estou interessado em criar uma Página Mestre fortemente tipada. Para conseguir isso, eu uso um controlador de base que recupera os dados para a página mestre. Todos os outros controladores herdam essa classe. Da mesma forma, eu tenhoViewModels para a página principal e quaisquer outras visualizações. A vistaViewModel classes herdadas da @ página mestViewModel.

Questã

Como um controlador filho deve garantir que os dados da página mestre sejam passados para a Visualização sem definir as propriedades de seusViewModel que pertencem à própria página mestra?

A minha página mestre exibirá vários botões, que são determinados em um arquivo XML, portanto, oButtons classe que estou preenchendo.

MasterPage ViewModel Code Snippet

using System.Collections.Generic;

namespace Site1.Models
{
    public class MasterViewModel
    {
        public List<Button> Buttons{set; get;}
    }
}

VisãoViewModel

namespace Site1.Models
{
    public class View1ViewModel : MasterViewModel
    {
        public SomeDataClass SomeData { get; set; }
    }
}
Base Controller
using System.Collections.Generic;
using System.Web.Mvc;
using Site1.Models;

namespace Site1.Controllers
{
    public abstract class BaseController : Controller
    {
        protected MasterViewModel model = new MasterViewModel();

        public BaseController()
        {
            model.Buttons = new List<Button>();
            //populate the button classes (doesn't matter how)
            PopulateButtons(model.Buttons);
        }
    }
}

Controlador da vista:

using System.Web.Mvc;

namespace Site1.Controllers
{
    public class View1Controller : BaseController
    {
        public ActionResult Index()
        {
            Models.View1ViewModel viewModel = new Models.View1ViewModel();
            SomeDataClass viewData = new SomeDataClass()
            //populate data class (doesn't matter how)
            PopulateDataClass(viewData);
            viewModel.SomeData = viewData;
            //I WANT TO ELIMINATE THE FOLLOWING LINE!
            viewModel.Buttons = model.Buttons;
            return View("Index", viewModel);
        }
    }
}

A página mestra herdaSystem.Web.Mvc.ViewMasterPage<Site1.Models.MasterViewModel>.

A vista herdaSystem.Web.Mvc.ViewMasterPage<Site1.Models.View1ViewModel>.

questionAnswers(2)

yourAnswerToTheQuestion