如何使用XAML对图像进行数据绑定?
具体来说,我有一个流对象,我想将其转换为图像。
但是,我找不到如何执行此操作的基本示例。
1。 viewmodel属性是什么样的?
我是否使用ImageSource?
我需要值转换器吗?
2。 XAML是什么样的?
答案 0 :(得分:3)
表单有一个StreamImageSource,您可以使用它来执行此操作。但是,如果不编写自定义转换器,我认为你不能在XAML中使用它。要在代码中使用它,您可以这样做:
image1.Source = ImageSource.FromStream(() =>
{
// whatever you need to do to create your stream
return stream;
});
答案 1 :(得分:2)
该演示通过代码说明了绑定。对于XAML
实现,您需要以下内容: -
<Image Source="{Binding MyImageAsBytes, Converter={StaticResource MyByteToImageSourceConverter}}" />
在byte[]
中有ViewModel
后,将需要转换器将包含图像的字节数组转换为Xamarin.Forms
ImageSource
。
转换器获取byte[]
数组并通过以下方式转换为ImageSource
: -
objImageSource = ImageSource.FromStream(() => new MemoryStream(bytImageData));
示例: - 强>
StackLayout objStackLayout = new StackLayout();
byte[] bytImage = { your image as a byte collection }
this.BindingContext = new MyImageViewModel()
{
MyImageAsBytes = bytImage
};
Image objImage = new Image();
objImage.SetBinding(Image.SourceProperty, "MyImageAsBytes", converter: new MyByteToImageSourceConverter());
objStackLayout.Children.Add(objImage);
<强>视图模型: - 强>
public class MyImageViewModel
: Xamarin.Forms.View
{
public static readonly BindableProperty MyImageAsBytesProperty = BindableProperty.Create<MyImageViewModel, byte[]>(p => p.MyImageAsBytes, default(byte[]));
public byte[] MyImageAsBytes
{
get { return (byte[])GetValue(MyImageAsBytesProperty); }
set { SetValue(MyImageAsBytesProperty, value); }
}
}
<强>转换器: - 强>
public class MyByteToImageSourceConverter
: IValueConverter
{
public object Convert(object pobjValue, Type pobjTargetType, object pobjParameter, System.Globalization.CultureInfo pobjCulture)
{
ImageSource objImageSource;
//
if (pobjValue != null)
{
byte[] bytImageData = (byte[])pobjValue;
//
objImageSource = ImageSource.FromStream(() => new MemoryStream(bytImageData));
}
else
{
objImageSource = null;
}
//
return objImageSource;
}
public object ConvertBack(object pobjValue, Type pobjTargetType, object pobjParameter, System.Globalization.CultureInfo pobjCulture)
{
throw new NotImplementedException();
}
}