0

次のシナリオを検討してください。

大量のデータを含むビュー (つまり、ListBox項目がいっぱいのビュー) にいます。データは外部データ ソースからダウンロードされており、現在のビューでは公開されていない多くのプロパティが含まれています。この情報を表示する詳細ビューを作成したいと考えています。

ナビゲーション URL に「id=」を付けて新しいビューにナビゲートするように を配線するListBoxItemと、指定された ID パラメータを使用して、データ ソース (REST サービスなど) にデータを簡単にクエリできます。しかし、データは既に親ビューで利用可能です。では、このデータを何らかの方法で次のビューに送信し、データ ソースへの別の呼び出しをスキップして、アプリケーションを高速化するにはどうすればよいでしょうか?

4

2 に答える 2

1

これを行うにはいくつかの方法があると思いますが、これが外部ライブラリを使用せずに実現する最も簡単な方法です。

ユーティリティ クラスNavigationUtility(または何でも) を作成し、次の構造を実装します。

public static class NavigationUtility
{
    // The object to send
    private static object passedObject = null;

    // A method to fetch the object
    public static object GetObject() {
        // implementation below
    }

    // Utility method to check if an object was passed
    public static bool HasObject() 
    {
        return passedObject != null;
    }

    // A method to navigate to a page
    public static void Navigate(string url, object obj = null)
    {
        // implementation below
    }
}

これが実装するインターフェイスです。ビュー間の遷移中にオブジェクトを安全に保つプライベート変数と、送信された情報をナビゲートおよびフェッチするためのメソッドがあります。

これを正しい方法で実装するには、考慮すべき点がいくつかあります。

  1. 渡されたオブジェクトは 1 回だけフェッチできる必要があります。そうしないと、不注意に使用すると、間違ったオブジェクトがプログラムの間違った部分に表示される可能性があります。
  2. アプリケーション全体をナビゲートするためのメソッドの代わりにこれを使用するには、NavigationService.Navigate(Uri)オブジェクトを送信する必要がない状況も処理できる必要があります。

GetObjectそれでは、インターフェイスの最初のメソッドと、その実装方法を見てみましょう。

public static object GetPassedObject() 
{
    var obj = passedObject;
    passedObject = null; 
    return obj;
}

ご覧のとおり、プロパティがフェッチされるたびに内部の passedObject を null にすることで、要件 #1 を簡単に処理します。これは次のように機能します (受信ビューで)。

NavigationUtility.HasObject(); // returns true if an object was sent
var data = NavigationUtility.GetObject() as SomeModel; // fetches the object and casts it
NavigationUtility.HasObject(); // returns false always;

ここで面白いことに - メソッドの実装Navigate:

public static void Navigate(string url, object obj = null) 
{
    // Saves the object
    passedObject = obj;

    if( url != null && url.length > 0 )
    {
        // Creates the Uri-object
        Uri uri = new Uri(url, UriKind.Relative);

        // Navigates the user (notice the funky syntax - so that this can be used from any project
        (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(uri);
    }
}

以上です!

于 2012-08-10T09:34:07.120 に答える
0

アプリケーションオブジェクトを使用してデータを作成することで、RESTサービスを呼び出すときに、オブジェクトデータを別のビューに簡単に移動できます。データがアプリケーションオブジェクトにも設定されることを確認してください。

jsonオブジェクトを使用して、任意のグローバルオブジェクトに設定することもできます

于 2012-08-10T09:45:38.300 に答える