在我的应用程序中,我使用响应式扩展来发出 Web 请求。我的问题是,我提出两个请求。在第一个请求中,我将从服务器获取一个 url,并通过使用该 url 我发送另一个请求以获取图像和描述。在我的第一个请求中,除了 url,我将获得标题和日期相关信息。所以我正在做的是我将解析我的模型类中的数据,然后我将调用另一个请求。在这里,当我收到响应时,我会将其添加到可以保存结果的类对象中。当我的第一个请求的完整(onnext,error,complete)部分到达时,我将在我的财产中得到这两个结果。但问题是相应的更改,即第二个 Web 请求的结果没有反映在我的 UI 上。请任何人帮助我避免这个问题。
问问题
119 次
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.PropertyChanged
b)在您设置为 DataContext 的类的属性上引发事件?
于 2012-03-07T07:32:27.983 回答