Вам не нужно передавать его на UserControl
.DataContext
Объекты недорогие в создании, поэтому, если вам нужен доступ к объекту, вы можете просто создать новый.
Однако, чтобы ответить на ваш вопрос напрямую, вы можете поделиться HttpContext
-области DataContext
среди всех пользовательских элементов управления, сохранив его в HttpContext.Items
, например
HttpContext.Items["DataContextKey"] = new MyDataContext();
Затем,Вы можете инициализировать поле в своем конструкторе, например, из своих элементов управления через
_dataContext = (MyDataContext)Context.Items["DataContextKey"];
Более элегантная реализация этого подхода (и других подходов) для управления жизненным циклом DataContext
в целом доступна на http://www.west -wind.com / weblog / posts / 246222.aspx , в классе DataContextFactory
.
Наиболее интересный для вас метод:
static object GetWebRequestScopedDataContextInternal(Type type, string key, string connectionString)
{
object context;
if (HttpContext.Current == null)
{
if (connectionString == null)
context = Activator.CreateInstance(type);
else
context = Activator.CreateInstance(type, connectionString);
return context;
}
// *** Create a unique Key for the Web Request/Context
if (key == null)
key = "__WRSCDC_" + HttpContext.Current.GetHashCode().ToString("x") + Thread.CurrentContext.ContextID.ToString();
context = HttpContext.Current.Items[key];
if (context == null)
{
if (connectionString == null)
context = Activator.CreateInstance(type);
else
context = Activator.CreateInstance(type, connectionString);
if (context != null)
HttpContext.Current.Items[key] = context;
}
return context;
}