Silverlight: Как создать страницу динамически - PullRequest
2 голосов
/ 26 февраля 2010

Проблема: Я сохраняю имя страницы, которую я хочу открыть в Silverlight, в базе данных. Когда я запускаю приложение, я хочу установить страницу на эту строку

так, а не это:

this.RootVisual = new MainPage();

Я хочу что-то вроде этого

string pageName = getValueFromDatabase()
if (!PageExists(pageName))
   throw error
else
   this.RootVisual = SomeWizzyMethodToCreatePage(pageName) 

Полагаю, мне нужно использовать отражение здесь, чтобы найти все страницы (PageExists), а затем каким-то образом создать новый экземпляр (SomeWizzyMethodToCreatePage).

1 Ответ

6 голосов
/ 26 февраля 2010

Предполагая, что вы имеете в виду из базы данных имя страницы, для которой вы хотите определить имя отображаемой страницы.

Я возьму самый простой пример, когда все страницы находятся в одной сборке приложения и в одном известном пространстве имен. Это может быть так просто, как это: -

Type pageType = Assembly.GetExecutingAssembly().GetType("SilverlightApplication1." + pageName);
RootVisual = (UIElement)Activator.CreateInstance(pageType);

Возможно, более гибким подходом будет сохранение в базе данных AssemblyQualifiedName. Таким образом, страница может находиться в другой сборке и / или пространстве имен, она должна присутствовать только в XAP (я не уверен, может ли она быть в zip-библиотеке библиотеки кэшированных сборок) Если имя страницы - AssemblyQualifiedName, тогда код становится: -

Type pageType = Type.GetType(pageName);
RootVisual = (UIElement)Activator.CreateInstance(pageType);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...