在Image上数据绑定但我需要一个byteArray

Tea*_*oKi 6 c# data-binding mvp infragistics

我正在使用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; }
    ...
Run Code Online (Sandbox Code Playgroud)

您会注意到Image存储为byte [].我将这些属性绑定到我的用户控件上的控件:

    BindingHelper.BindField(_ultraPictureBoxPV, "Image", _bindingSource, "PVImage");
    BindingHelper.BindField(_ultraPictureBoxOntwerp, "Image", _bindingSource, "OntwerpImage");
Run Code Online (Sandbox Code Playgroud)

BindingHelper只是将BindingContext添加到指定的Controler(control.BindingContext.Add(...)).

无论如何,问题是:数据契约包含图像作为bytearray,而我绑定到图像.这会导致属性保持为"null",因为他不想将一个Image放在byteArray中;)

我试过玩它,但我想我有两种可能性:

  1. 我可以尝试使用某种转换器吗?因此,当插入Image时,它将作为byteArray而不是Image传递给Model(=数据绑定).

  2. 我可以删除绑定并在表单"提交"时创建一个事件,并将图像转换为byteArray并填写模型.(=没有数据绑定)

TL; DR; 您是否知道在将图像传递给数据绑定时将图像"转换"为bytearray的方法?

我希望我的问题很明确!谢谢您的帮助

小智 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();
}
Run Code Online (Sandbox Code Playgroud)