для форм Xamarin я боролся с этим, поэтому сначала не NavigationRenderer, вы получите нулевой NavigationController, вместо этого используйте PageRenderer:
[assembly: Xamarin.Forms.ExportRenderer(typeof(ContentPage), typeof(ContentPageRenderer))]
namespace sample
{
class ContentPageRenderer : PageRenderer
{
public override void ViewWillAppear(bool animated)
{
base.ViewDidAppear(animated);
var navctrl = this.ViewController.NavigationController;
navctrl.InteractivePopGestureRecognizer.Delegate = new UIGestureRecognizerDelegate();
navctrl.InteractivePopGestureRecognizer.Enabled = true;
}
}
}
Я вижу два варианта:
Первый:
Установить ViewData для MasterPage в YourBaseController.OnActionExecuting () или YourBaseController.OnActionExecuted ():
public class YourBaseController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Optional: Work only for GET request
if (filterContext.RequestContext.HttpContext.Request.RequestType != "GET")
return;
// Optional: Do not work with AjaxRequests
if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
return;
...
filterContext.Controller.ViewData["foo"] = ...
}
}
Второй:
Или создайте собственный фильтр:
public class DataForMasterPageAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Optional: Work only for GET request
if (filterContext.RequestContext.HttpContext.Request.RequestType != "GET")
return;
// Optional: Do not work with AjaxRequests
if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
return;
...
filterContext.Controller.ViewData["foo"] = ...
}
}
, а затем примените к вашим контроллерам:
[DataForMasterPage]
public class YourController : YourBaseController
{
...
}
Я думаю, что второе решение как раз для вашего случая.