2011-09-15 6 views
0

아래와 같이 내 압핀에 대한 OnClick 이벤트가 있습니다.변수를 다른 Silverlight 페이지로 전달하는 방법은 무엇입니까?

void BusStop1061_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    MessageBox.Show("Buses from this station: City Link"); 
} 

내가 다른 페이지로와 "PassedVariable"를 INT로 bustop 번호를 전달하고자하는

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    string site = "http://www.sourceDomain?stop=" + PassedVariable; 
    webBrowser1.Navigate(new Uri(site, UriKind.Absolute)); 

} 

그때, 페이지 하나에 일정한 INT를 만드는 페이지로 전달의 생각 2 urimapping 사용하지만 작동하지 않는 것 같아요 누군가가 더 나은 옵션을 가지고있을 것이라고 생각했습니다

나는 비슷한 게시물을 보았지만 꽤 질문에 대답하지 않습니다.

+0

가능한 중복을 사용하고자 할 때 (HTTP [또 다른 형태의 C#을에서 변수를 문의] : //stackoverflow.com/questions/5928071/call-variable-from-another-form-c) –

+0

http://stackoverflow.com/questions/5865588/how-to-pass-value-from-textbox-to -label-on-different-form 및 http://stackoverflow.com/questions/4247807/passing-variable-between-winforms –

+0

및 http : // stackoverflow.com/questions/7316965/다중보기 모델 간 데이터 공유/7338294 # 7338294 –

답변

1

여러 가지 방법이 있습니다.

한 가지 방법은 App.xaml.cs 클래스에 BustopNumber 속성을 만들고 한 페이지에 설정하고 다른 위치에 액세스하는 것입니다.

값이 설정되지 않았거나 유효하지 않은 경우를 대비해야하지만 이것은 내가 선호하는 방법입니다.

위의 코드 스 니펫에서 수행중인 것과 비슷한 쿼리 문자열 매개 변수로 전달하는 방법도 있습니다. 탐색 된 페이지에서 NavigationContext 개체를 통해 쿼리 문자열 매개 변수에 액세스하고 이름을 검색 할 수 있습니다.

편집 추가 :이 본질적으로 글로벌에 대한 해킹,하지만 신중하게 사용 된 경우, 여러 페이지에 걸쳐 정보를 공유 할 수있는 빠르고 쉬운 방법을 제공 할 수

public partial class App : Application 
{ 
    public static int BusStopNumber { get; set;} 
} 

//And in your application you can access it like so: 
App.BusStopNumber = 10; 

은 물론, 캡슐화에 문제가 있습니다.

+0

App.Xaml 방식이 재미있을 것 같습니다. 이것에 익숙하지 않은 Im. 나를 돕기 위해 코드 샘플을 변경 했습니까? – Rhys

+0

고마워, 나는 네비게이션 방식을 사용했고 훌륭하게 작동했다. 덕분에 – Rhys

+0

Rhys, App.xaml.cs에 값을 추가하는 방법을 보여주는 답변이 업데이트되었습니다. – Alan

1

하나의 접근법은보기간에 공유 할 수있는 공통 데이터가있는 클래스를 추가하는 것입니다. 이것은 하나의 방법이며 최선이 아닐 수도 있습니다.

Session의 Singleton을 만들고이를 사용자 정의 컨트롤 바인딩의 일부로 XAML에 제공 할 수있는 정적 클래스를 가질 수 있습니다. 원하는 경우 세션 클래스를 여러 속성으로 향후 향상시킬 수 있습니다.

View1 View2 
    ^  ^
    |   | 
    |   | 
    v   v 
    Session Service (stores user selection) 

View1 및 View2는 세션 서비스에 대한 참조가 있어야합니다.

public class Session 
{ 
    public int BusStop {get; set;} 
} 

코드를 모듈화하고 앞으로 이러한 문제가 발생하지 않도록 MVVM 패턴을 살펴보십시오.

+0

감사합니다. 저는 모델 뷰 뷰 모델에 대해 방금 읽었습니다.하지만 지금은 아직 조금 이상하게 배우고 있습니다. – Rhys

0

PhoneApplicationService를 사용할 수 있습니다. 쉘 이름 공간을 포함하십시오. using Microsoft.Phone.Shell;

PhoneApplicationService appSer = PhoneApplicationService.Current; 
appSer["busStopNumber"]=number; 

당신이 (페이지에 또한 appSer를 초기화) 할 다른 페이지에 이미의

if(appSer["busStopNumber"]!=null) 
{ 
int number = (int)appSer["busStopNumber"]; 
} 
+0

'appSer [ "busStopNumber"] = number;는 [] 표현식으로 색인을 적용 할 수 없습니다. 그게 맞습니까? – Rhys

관련 문제