1

だから私はこのガイドを使用していますが、それが機能しているかどうかを判断するためのテストには運がありません。そのコードからの唯一のバリエーションは、TextBlockを変更する代わりに、関数の外部で宣言された静的なGeoCoordinateオブジェクトを設定していることです。

public static void PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
    {
        coord = e.Position.Location;
    }

さて、ステータスをテキストボックスに表示する代わりに、[OK]ボタン付きのメッセージボックスを表示するように変更し、ボタンイベントを削除しました。

MainPageレンダリングには、次のものがあります。

private void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        if (watcher == null)
        {
            watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);
            watcher.MovementThreshold = 20;

            watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(StatusChanged);
            watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(PositionChanged);
        }
        watcher.Start();
        if (!App.ViewModel.IsDataLoaded)
        {
            string blah = "";
            blah += coord.Latitude.ToString();
            blah += "; " + coord.Longitude.ToString();

ただし、coordを初期化しないと、エラーが発生します(理解できます)が、初期化すると= new GeoCoordinate(); すべての数値項目に対してNaNを返します。イベントハンドラー内に、ヒットしないブレークポイントを設定しました(予想される動作ですか?)

エミュレーターでは、>>を使用し、ライブに設定していくつかの場所を選択し、場所を切り替える時間を10秒に設定して、デバッグの実行中に再生しました。エミュレータのロケーション部分のデバッグ/実行が正しく行われていませんか?

更新:文字列blahアイテムを削除して場所に基づいてリストを作成するように更新した後、機能しているように見えます。

4

1 に答える 1

0

あなたのPositionChangedメソッドはあなたの座標を更新しますが、それが設定される前を除いてあなたはそれを読むことはありません、そしてあなたのコードは自動更新のためにデータバインディングを使用しません-あなたの座標があなたのViewModelにあった場合(あなたがMVVMパターンに従っていると仮定して) 、プロパティ名で確認)、位置の変更をリッスンするイベントハンドラーは、現在のblah変数のViewModelのバージョンのPropertyChangedイベントも発生させる可能性があります

于 2012-06-14T19:03:39.923 に答える