与(Rx和windows Phone)绑定文本时出现问题



在我的应用程序中,我使用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事件?

相关内容

  • 没有找到相关文章

最新更新