2012-09-10 2 views
19

Windows 8 RTM 및 C# (VS 2012 RTM)을 사용하여 메트로 앱을 개발 중입니다. 페이지를 다시로드해야합니다. 동일한 페이지로 이동하지 않고 페이지를 새로 고침하는 방법을 설명 할 수 있습니까? 페이지를 다시보십시오. 개요 : 저는 다국어 지원으로 메트로 앱을 개발하고 있습니다. 사용자가 언어를 선택하면 내가 "뒤로"를 누를 때 나는 아래의 코드메트로 앱에서 페이지 새로 고침 C#

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de"; 

에 의해 기본 언어를 무시하고

this.Frame.Navigate(this.GetType()); 

언어가 "드"변경이 코드를 사용하여 페이지를 다시로드, 그러나 해요 페이지에서 이전 페이지로 이동하는 대신 같은 페이지를 탐색합니다. 내가 놓친 것이 있습니다. 누군가이 방법을 설명해 주시겠습니까? 미리 감사드립니다.

+1

Rajkumar에 대한 해결책이나 해결책을 찾았습니까? – Nilzor

+0

최상의 답변을 표시하는 것은 매우 예의가됩니다. –

답변

15

이 페이지를 새로 고침합니다 :

var _Frame = Window.Current.Content as Frame; 
_Frame.Navigate(_Frame.Content.GetType()); 
_Frame.GoBack(); // remove from BackStack 
  • OnNavigatingFrom 처리는()는 페이지의 데이터와 상태를 저장할 수 있습니다.
  • OnNavigatingTo() 처리 페이지의 데이터와 상태를로드 할 수 있습니다.

주의 할 점으로서, 필자의 샘플은 페이지 매개 변수를 설명하지 않습니다. 또 다른 경고로, 샘플이 페이지를 두 번 새로 고칩니다. 그러나 GoBack()은 BackStack에서 새 항목을 제거하는 데 필요합니다. WP와 달리 프레임에는 새로 고침()이 없습니다. 또한 BackStack에는 Remove()가 없습니다.

UPDATE

나는 더 이상 위의 방법을 사용하지 않는다. 이것을 사용합니다 :

public bool Reload() { return Reload(null); } 
private bool Reload(object param) 
{ 
    Type type = this.Frame.CurrentSourcePageType; 
    if (this.Frame.BackStack.Any()) 
    { 
     type = this.Frame.BackStack.Last().SourcePageType; 
     param = this.Frame.BackStack.Last().Parameter; 
    } 
    try { return this.Frame.Navigate(type, param); } 
    finally { this.Frame.BackStack.Remove(this.Frame.BackStack.Last()); } 
} 
+1

다음 사항에 유의하십시오. (복잡한) 페이지 매개 변수를 사용하는 경우 페이지 기본 클래스에 매개 변수를 저장하십시오. 다음에 전달하면됩니다. _Frame.Navigate (..., savedParameter). 두 번로드하는 것을 방지하기 위해 (NavigatedTo에 과부하가 걸리는 경우에 대비하여) 전역 플래그 "IsReloading"이 설정됩니다. onnavigatedto가 true로 설정된 경우 추가로드를 취소하고 false로 설정하십시오. –

+0

샘플은 단락보다 훨씬 낫습니다. –

+8

공헌은 비평보다 훨씬 낫다. –

1

나는 무엇을 하려는지 완전히 이해하지 못하기 때문에 잘못되었을 수 있습니다.

페이지를 새로 고칠 때 해당 코드 줄을 호출하면 현재 형식의 새로운 개체를 만들고 탐색하여 현재 페이지에있는 동안 사용자가 변경 한 내용을 저장하지 않게됩니다.

어떤 유형의 디자인 패턴을 사용하고 있습니까? 이와 같은 것들을 위해 MVVM 라이트 라이브러리를 사용하여 체크 할 때 정말 멋진 탐색 서비스를 구현하는 MVVM을 사용합니다.

+0

고마워 lookitskris,하지만 여기 MVVM 패턴을 사용하지 않고, 거기에 새로운 객체를 생성하면서 페이지를 새로 고칠 수있는 방법이 있습니까? 제발 도와주세요. –

+0

프레임 개체의 새로 고침 메서드를 확인하십시오. – lookitskris

+0

WinRT의 프레임에서 새로 고침을 사용할 수 없습니다. https://msdn.microsoft.com/en-us/library/system.windows.controls.frame.refresh%28v=vs.110%29.aspx –