有没有一种方法可以在电抗ui中使用异步值转换器



我有一个视图模型,其图像属性类型为byte[]。我有一个带有Windows.UI.Xaml.Controls.image类型图像项的视图在视图的代码隐藏中,我想将viewmodel image属性绑定到视图图像。

我的代码如下:

this.WhenActivated(disposables =>
{
this.OneWayBind(ViewModel, vm => vm.Image2, v => v.Image.Source, async (bytes) => await ConvertAsync(bytes))
.DisposeWith(disposables);
});

这导致错误:无法将lambda表达式转换为类型"object",因为它不是委托类型。转换器如下:

static async Task<BitmapImage> ConvertAsync(byte[] bytes)
{            
using (var stream = new MemoryStream(bytes))            
using (var randomAccessStream = stream.AsRandomAccessStream())                
{
var bitmapImage = new BitmapImage
{
DecodePixelHeight = 100,
DecodePixelWidth = 100
};
await bitmapImage.SetSourceAsync(randomAccessStream);
return bitmapImage;
}
}

请注意,使用bitmap Image.SetSource并使方法syncronous不是一个选项,因为它挂起了ui线程。如果使用转换器无法实现,您推荐的解决方案是什么?当然,我可以更改视图模型中的类型,但这取决于UWP平台。我宁愿不要。

这是由于那里不支持异步。你可以做一些类似的事情

this.WhenAnyValue(x => x.ViewModel.Image2).SelectMany(x => ConvertAsync(x)).BindTo(this, x => x.Image.Source)

最新更新