0

在我的应用程序中,我使用响应式扩展来发出 Web 请求。我的问题是,我提出两个请求。在第一个请求中,我将从服务器获取一个 url,并通过使用该 url 我发送另一个请求以获取图像和描述。在我的第一个请求中,除了 url,我将获得标题和日期相关信息。所以我正在做的是我将解析我的模型类中的数据,然后我将调用另一个请求。在这里,当我收到响应时,我会将其添加到可以保存结果的类对象中。当我的第一个请求的完整(onnext,error,complete)部分到达时,我将在我的财产中得到这两个结果。但问题是相应的更改,即第二个 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; }
}

现在我创建了这两个函数:

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

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

它们代表代码的两个部分。

以下是将它们连接在一起的方法:

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将您的两个子部分连接在一起。希望您可以更轻松地定义getX&getYFromX函数。

于 2012-03-09T12:23:28.907 回答
0

您是在使用 a) 跳回 UI 线程ObserveOnDispatcher()吗?INotifyPropertyChanged.PropertyChangedb)在您设置为 DataContext 的类的属性上引发事件?

于 2012-03-07T07:32:27.983 回答