在Windows Phone项目中使用Akavache的LoadImageFromUrl的正确方法是什么?

时间:2014-06-16 02:05:21

标签: c# windows-phone-8 akavache

目标是从网址异步获取图像,然后将其设置为BitmapSource viewmodel属性(在视图中为数据绑定)。

我可以使用LoadImageFromUrl来获取Splat.IBitmap,但我无法弄清楚如何将其连接到BitmapSource。事实上,我不确定我是否正确使用这种方法。

这就是我所拥有的:

using Akavache;
using System.Reactive.Linq;

// ...others...

var myViewModel = ...;

var url = @"http://upload.wikimedia.org/wikipedia/meta/0/08/Wikipedia-logo-v2_1x.png";

BlobCache.LocalMachine.LoadImageFromUrl(url, false, 200, 183)
    .ObserveOnDispatcher()

    // up to here, it's fine
    // what goes below is the question

    // I manually instantiate an Action object so as to explicitly pick that override,
    // but LoadImageFromUrl returns an IObservable<Splat.IBitmap>, so I'm not picking the wrong <T> here
    .Subscribe(new Action<Splat.IBitmap>(pic => {
        // haha, nope: myViewModel.someBitmapSource = (BitmapSource)pic);
    }), ex => Debug.WriteLine(ex));

我想到的其他事情:

  • 检查文档:似乎没有我能找到的
  • 谷歌周围:苗条的选择,没有什么直接帮助
  • 看看Akavanche tests中如何使用此方法:它似乎没有被调用
  • 由于返回了Splat - 名称空间对象,请检查Splat tests / docs:Closer。 splat自述文件说:

// ToNative always converts an IBitmap into the type that the platform
// uses, such as UIBitmap on iOS or BitmapSource in WPF
ImageView.Source = ViewModel.ProfileImage.ToNative();

很好,除了ToNative()在这种情况下没有意义,因为它不是Splat.IBitmap interface的成员。

现在我没有想法。

1 个答案:

答案 0 :(得分:1)

ToNativeIBitmap界面的Splat extension。在此上下文中添加对Splat和using的依赖将使该方法可用。

这是否是正确的方式,我不确定。