我正在使用Winforms,CAB,C#和Infragistics。我正在尝试使用与WCF连接的后端使用MVP。
在我的演示者中,我有我的模型,我们称之为AgreementDataContract。此数据协定有许多属性:
...
[DataMember]
public byte[] PVImage { get; set; }
[DataMember]
public byte[] OntwerpImage { get; set; }
[DataMember]
public Decimal WattpiekPrijs { get; set; }
...
您会注意到Image存储为byte []。我将这些属性绑定到用户控件上的控件:
BindingHelper.BindField(_ultraPictureBoxPV, "Image", _bindingSource, "PVImage");
BindingHelper.BindField(_ultraPictureBoxOntwerp, "Image", _bindingSource, "OntwerpImage");
BindingHelper只是将BindingContext添加到指定的Controler(control.BindingContext.Add(...))。
无论如何,问题是:数据契约包含图像作为bytearray,而我绑定到图像。这会导致属性保持为“null”,因为他不想将Image放在byteArray中;)
我试过玩它,但我认为我有两种可能性:
我可以尝试使用某种转换器吗?因此,当插入一个Image时,它会作为byteArray而不是Image传递给Model(=数据绑定)。
我可以删除绑定并在表单“提交”时创建一个事件,并将图像转换为byteArray并填写模型。 (=没有数据绑定)
TL; DR;您是否知道在将图像传递给数据绑定时将图像“转换”为bytearray的方法?
我希望我的问题很明确!谢谢你的帮助
答案 0 :(得分:3)
我会添加一个Image类型的新属性,它可以绑定到你的UltraPictureBox控件。 添加两个知道如何在任一方向转换的方法。
[DataMember]
public Image OntwerpImageImage
{
get { return ConvertByteArrayToImage(OntwerpImage); }
set { OntwerpImage = ConvertImageToByteArray(value); }
}
//[DataMember]
public byte[] OntwerpImage { get; set; }
public Image ConvertByteArrayToImage(Byte[] bytes)
{
var memoryStream = new MemoryStream(bytes);
var returnImage = Image.FromStream(memoryStream);
return returnImage;
}
public Byte[] ConvertImageToByteArray(Image image)
{
var memoryStream = new MemoryStream();
image.Save(memoryStream, ImageFormat.Jpeg);
return memoryStream.ToArray();
}