2011-09-15 3 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)); 

} 

私は、その後、ページ1に一定のint型を作成し、それをページに渡すのを考えていました2 urimappingを使用していますが、うまくいかないと思って、誰かがより良い選択肢を持っていると思ったのです

私は同様の投稿を見ましたが、

+0

可能重複://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

これを達成する方法は複数あります。

1つの方法として、App.xaml.csクラスにBustopNumberプロパティを作成し、それを1ページに設定し、他の場所にアクセスします。

これは私の好みのアプローチですが、値が設定されていないか無効であることを防ぐ必要があります。

もう1つの方法は、上記のコードスニペットで実行しているのと同様のクエリ文字列パラメータとして渡すことです。ナビゲートされたページでは、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

1つのアプローチは、ビュー間で共有できる共通データを持つクラスを追加することです。これは方法の1つであり、最良ではない可能性があります。

Sessionのシングルトンを作成し、それをユーザーコントロールバインディングの一部として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を使用できます。シェルの名前空間を含めます。 [別のフォームのC#から変数を呼び出す](HTTPの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