Привязка данных на изображении, но мне нужен byteArray - PullRequest
6 голосов
/ 13 сентября 2011

Я работаю с Winforms, CAB, C # и Infragistics. Я пытаюсь работать с MVP с моим бэкэндом, связанным с WCF.

В моем докладчике моя модель, назовем ее AgreementDataContract. Этот контракт данных имеет несколько атрибутов:

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

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

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

Вы заметите, что изображение хранится в байтах []. Я связываю эти атрибуты с элементами управления моего пользовательского элемента управления:

    BindingHelper.BindField(_ultraPictureBoxPV, "Image", _bindingSource, "PVImage");
    BindingHelper.BindField(_ultraPictureBoxOntwerp, "Image", _bindingSource, "OntwerpImage");

BindingHelper просто добавляет BindingContext к указанному контроллеру (control.BindingContext.Add (...)).

В любом случае, проблема: контракт данных содержит изображение в виде байта, в то время как я привязываюсь к изображению. Это приводит к тому, что атрибут остается «нулевым», потому что он не хочет помещать изображение в byteArray;)

Я пытался поиграть с этим, но я думаю, что у меня есть 2 возможности:

  1. Могу ли я использовать какой-то конвертер? Поэтому, когда изображение вставляется, оно передается как byteArray вместо изображения в модель (= привязка данных).

  2. Я могу отбросить привязку и создать событие, когда форма «отправлена», преобразовать изображение в byteArray и заполнить модель. (= нет привязки данных)

TL; DR; Знаете ли вы, как "преобразовать" изображение в байтовый массив при его передаче в привязку данных?

Надеюсь, мой вопрос понятен! Спасибо за помощь

1 Ответ

3 голосов
/ 13 сентября 2011

Я бы добавил новое свойство типа 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...