有没有办法在反应式 ui 中使用异步值转换器?

Is there an way to use an async value converter in reactive ui?

我有一个视图模型,其图像 属性 类型为 byte[]。 我有一个图像项目 Windows.UI.Xaml.Controls.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;
        }
    }

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

这是因为那里不支持异步。你可以做类似

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