2010-02-25 5 views
2

문제점 : 데이터베이스에 Silverlight에서 연 페이지 이름을 저장합니다. 나는 응용 프로그램을 시동 할 때 나는이보다는Silverlight : 동적으로 페이지를 만드는 방법

그래서이 문자열로 페이지를 설정하려면 :

this.RootVisual = new MainPage(); 

내가 원하는 내가 반사를 사용해야합니다 생각이

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

같은 여기 모든 페이지 (PageExists)를 찾은 다음 어떻게 든 새 인스턴스 (SomeWizzyMethodToCreatePage)를 만듭니다.

+0

당신은 당신이 당신이 열려는 페이지의 __name__를 저장하는 의미 실제로 않는 당신이 데이터베이스에 열려는 페이지를 저장하는 말? – AnthonyWJones

+0

예, 이름입니다. 업데이트 해 줘서 고마워. –

답변

6

DB에서 질문을 받았다고 가정하면 표시 할 페이지의 이름을 결정하려는 페이지의 이름 입니다.

모든 페이지가 단일 응용 프로그램 어셈블리와 알려진 단일 네임 스페이스에있는 가장 간단한 예제를 살펴 보겠습니다. 그것은이처럼 간단 할 수있다 : -

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

아마도 더 flexibable 접근 방식은 데이터베이스 AssemblyQualifiedName에 저장하는 것입니다. 이렇게하면 페이지가 다른 어셈블리 및/또는 네임 스페이스에있을 수 있으므로 XAP에만 있어야합니다 (캐시 된 어셈블리 라이브러리 zip에 있는지 여부는 잘 모르겠습니다). 페이지 이름이 인 경우 AssemblyQualifiedName 다음 코드가된다 : -

Type pageType = Type.GetType(pageName); 
RootVisual = (UIElement)Activator.CreateInstance(pageType); 
+0

놀라운 답변, 안토니! +1. 건배. – Anvaka

+0

잘 작동합니다 ... 내 Views Namespace를 추가해야했습니다 .GetType ("SilverlightApplication1.Views."+ pageName); –

+0

+1 좋은 답변입니다. –

관련 문제