在我的应用程序中,我使用Reactive扩展进行web请求。我的问题是,我提出了两个要求。在第一个请求中,我将从服务器获得一个url,通过使用该url,我将发送另一个获取图像和描述的请求。在我的第一个请求除了网址,我会得到标题和日期相关的信息。因此,我要做的是解析模型类中的数据,然后从中调用另一个请求。在这里,当我收到响应时,我会将其添加到可以保存结果的类对象中。当我的第一个请求的complete(onnext,error,complete)部分到达时,我将在我的属性中获得这两个结果。但问题是,相应的更改(即第二次web请求的结果)没有反映在我的UI上。请任何人帮助我避免这个问题。
以下是我将如何构建您的代码-这不是一个完整的解决方案,因为您需要填补一些空白-但它应该会让它变得更容易。
我一开始就假设你会有这样的类:
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,
};
这里使用SelectMany
的Rx魔法将您的两个子部分连接在一起。希望您能更容易地定义getX
&CCD_ 3起作用。
您是a)使用ObserveOnDispatcher()
跳回UI线程吗?以及b)在您设置为DataContext的类的属性上引发INotifyPropertyChanged.PropertyChanged
事件?