在图像上进行数据绑定,但我需要一个字节数组。

6

我正在使用Winforms、CAB、C#和Infragistics技术。我想要使用MVP模式,将后端与WCF连接起来。

在我的Presenter中,我有一个Model,我们称之为AgreementDataContract。这个数据合同有一堆属性:

    ...
    [DataMember]
    public byte[] PVImage { get; set; }

    [DataMember]
    public byte[] OntwerpImage { get; set; }

    [DataMember]
    public Decimal WattpiekPrijs { get; set; }
    ...

你会注意到图像被存储为byte[]类型。我将这些属性绑定到用户控件上的控件中:
    BindingHelper.BindField(_ultraPictureBoxPV, "Image", _bindingSource, "PVImage");
    BindingHelper.BindField(_ultraPictureBoxOntwerp, "Image", _bindingSource, "OntwerpImage");

BindingHelper只是向指定的控件(control.BindingContext.Add(...))添加了一个BindingContext。
无论如何,问题在于:数据契约将图像作为字节数组,而我正在绑定到一个Image。这导致属性保持“null”,因为它不想将Image放入字节数组中 ;)
我尝试过进行调整,但我认为有两种可能性:
1.我可以尝试使用某种转换器?因此,当插入图像时,它将作为字节数组而不是Image传递到Model (=数据绑定)。
2.我可以放弃绑定,并在表单“提交”时制作一个事件,将图像自己转换为字节数组并填充模型。 (=无数据绑定)
TL;DR; 您知道在传递给数据绑定时将图像“转换”为字节数组的方法吗?
希望我的问题很清楚!感谢您的帮助
1个回答

3
我会为您的UltraPictureBox控件添加一个新的类型为Image的属性,该属性可绑定。 添加两个方法,可以在任何方向上进行转换。
[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();
}

谢谢,我明天尝试一下! - Team-JoKi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接