2011-09-15 181 views
0

我有一個我的Pushpins的OnClick事件如下。如何將變量傳遞給另一個Silverlight頁面?

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

我想給bustop號傳遞到另一個頁面,併爲int「PassedVariable」

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

} 

我想在第一頁上創建的整型,然後將它傳遞到頁面2使用urimapping,但它似乎並沒有工作,我想有人可能有更好的選擇

我曾看過類似的帖子,但他們不完全回答我的問題。

+0

可能重複[調用從另一種形式的C#變量(HTTP ://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/data-sharing-multiple-viewmodels/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的方式聽起來很有趣。我不熟悉這一點。任何代碼示例的更改可以幫助我解決問題? – Rhys

+0

謝謝,我使用了導航方法,效果很好。謝謝 – Rhys

+0

Rhys,更新了顯示如何將值添加到App.xaml.cs的答案 – Alan

1

其中一種方法是添加一個具有可在視圖之間共享的公用數據的類。這是一種方式,可能不是最好的。

您可以創建一個靜態類,它可以創建Session的單例並將其作爲用戶控件綁定的一部分提供給XAML。如果需要,會話類可以在未來增強多個屬性。

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

View1和View2應該有會話服務的引用。

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

您應該着眼於MVVM模式來模塊化您的代碼,並在將來避免任何此類問題。

+0

謝謝我剛剛閱讀了關於Model View View Model的內容,但我現在仍然在學習如此之外的一點點。 – Rhys

0

您可以使用PhoneApplicationService。包括shell命名空間。 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

相關問題