0

私のアプリケーションでは、Webリクエストを行うためにReactive拡張機能を使用しています。私の問題は、2つのリクエストを行っていることです。最初のリクエストでは、サーバーからURLを取得し、そのURLを使用して、画像と説明を取得するための別のリクエストを送信しています。URL以外の最初のリクエストでは、タイトルと日付に関連する情報を取得します。つまり、私が行っているのは、モデルクラスのデータを解析し、そこから他のリクエストを呼び出すことです。ここで応答を受け取ったら、結果を保持できるクラスオブジェクトにそれを追加します。そして、最初のリクエストのcomplete(onnext、error、complete)部分に到達すると、両方の結果がプロパティに表示されます。しかし、問題は、対応する変更、つまり2番目のWebリクエストの結果が私のUIに反映されていないことです。この問題を回避するために誰か助けてください。

4

2 に答える 2

3

これが私があなたのコードをどのように構成するかです-あなたが少し空白を埋める必要があるのでそれは完全な解決策ではありません-しかしそれはそれをより簡単にするはずです。

私はあなたがこのようなクラスを持っているという仮定から始めました:

public class X
{
    public Uri Uri { get; set; }
    public string Title { get; set; }
    public DateTime Date { get; set; }
}

public class Y
{
    public System.Drawing.Image Image { get; set; }
    public string Description { get; set; }
}

public class Z
{
    public Uri Uri { get; set; }
    public string Title { get; set; }
    public DateTime Date { get; set; }
    public System.Drawing.Image Image { get; set; }
    public string Description { get; set; }
}

次に、次の2つの関数を作成しました。

Func<IObservable<X>> getX =
    () =>
        {
            /* you must write this code */
        };

Func<X, IObservable<Y>> getYFromX =
    x =>
        {
            /* you must write this code */
        };

これらは、コードの2つの部分を表しています。

それらを結合する方法は次のとおりです。

IObservable<Z> getZ =
    from x in getX()
    from y in getYFromX(x)
    select new Z()
    {
        Uri = x.Uri,
        Title = x.Title,
        Date = x.Date,
        Image = y.Image,
        Description = y.Description,
    };

ここで使用するRxマジックSelectManyは、2つのサブパーツを結合します。getXうまくいけば、 &getYFromX関数を定義する方が簡単になるでしょう。

于 2012-03-09T12:23:28.907 に答える
0

あなたは a) を使用して UI スレッドに戻っていますObserveOnDispatcher()か? b) INotifyPropertyChanged.PropertyChangedDataContext として設定しているクラスのプロパティでイベントを発生させますか?

于 2012-03-07T07:32:27.983 に答える