none
visual studio c# image source binding передать два параметра например пол человека RRS feed

  • Вопрос

  • Мне надо передать два параметра один собственно фото а второй пол человека.

    Пробовал сделать так

    <Image Source="{Binding field_Foto, Converter={StaticResource ByteArrayImagesConverter}, ConverterParameter={Binding field_Gender}}" />
    


            public object Convert(object value, Type targetType, object parameter, string language)
            {
                if (value == null) return null;
    
                int gender = 0;
                if (parameter != null)
                {
                    var type = value.GetType();
                    gender = (int)parameter;
                }
    
                string s = (string)value;
                if (s.Trim().Length > 0)
                {
                    BitmapImage bmp = new BitmapImage();
                    try
                    {
                        bmp = GetImage(s).Result;
                    }
                    catch (Exception ex)
                    {
                    }
    
                    return bmp;
                }
                else
                {
                    if (gender == 1)
                    {
                        return new BitmapImage(new Uri("ms-appx:///Assets/Avatar_Man.png"));
                    }
                    else if (gender == 2)
                    {
                        return new BitmapImage(new Uri("ms-appx:///Assets/Avatar_Woman.png"));
                    }
                    return new BitmapImage(new Uri("ms-appx:///Assets/Avatar.png"));
                }
            }
    
            public object ConvertBack(object value, Type typeName, object parameter, string language)
            {
                throw new NotImplementedException();
            }
    
            public async Task<BitmapImage> GetImage(string value)
            {
                var buffer = System.Convert.FromBase64String(value);
                using (InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream())
                {
                    using (DataWriter writer = new DataWriter(ms.GetOutputStreamAt(0)))
                    {
                        writer.WriteBytes(buffer);
                        await writer.StoreAsync();
                    }
                    var image = new BitmapImage();
                    image.SetSource(ms);
                    return image;
                }
            }
    


    Задумка простая, если мужчина и нет его фотографии рисую мужской аватар, если женщина - женский аватар.

     Но не передать в конвертер второй параметр никак не получается. Подскажите пожалуйста, как это можно сделать. Какой чудотворный есть способ для этого.

    Пишу программу универсальную для Windows 10 на C#.

    21 июня 2016 г. 2:12

Ответы

  • Но не передать в конвертер второй параметр никак не получается. Подскажите пожалуйста, как это можно сделать. Какой чудотворный есть способ для этого.

    Задам вопрос как в матрице: А кто вам сказал, что параметр это простой тип?!

    Создайте сложный тип (класс, JSON, XML или что вам по душе)...

    Я думал над этим. Можно передать не только например поле из SQLITE а передать всю запись.

    Пока не представляю как это сделать но попробую

    Интересно как передать всю запись?

    PS.

    Все оказалось просто, я сложил два поля и передал как одно. А в конвертере разложил на два.
    21 июня 2016 г. 7:33

Все ответы

  • Все решается просто: всегда передается изображение.

    Это будет либо фактическое изображение если оно есть либо аватар который будет возвращен из базы по флагу пола. Таким образом никакого конвертера не требуется.

    Если не хотите делать это в базе то можно сделать то же самое в VM.

    Что до конвертеров то в WPF имеется IMultiValueConverter. Может он есть и в UWP. Но как я сказал он не нужен.

    Данная статья может быть полезной:

    http://www.damirscorner.com/blog/posts/20160221-MultibindingInUniversalWindowsApps.html


    This posting is provided "AS IS" with no warranties, and confers no rights.

    21 июня 2016 г. 2:28
    Модератор
  • К сожалению Visual Studio пишет "multibinding не поддерживается в проектах windows app"
    21 июня 2016 г. 3:30
  • В вашем случае это наверное даже к лучшему так как есть более правильные варианты решения. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    21 июня 2016 г. 3:53
    Модератор
  • В вашем случае это наверное даже к лучшему так как есть более правильные варианты решения. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    Как я без конвертера преобразую строку в картинку?

    Понимаю что должно быть какое то решение, но?

    21 июня 2016 г. 4:07
  • Почему стало в универсальных приложениях нельзя в конвертер передать два параметра?

    Или как то можно?

    21 июня 2016 г. 4:36
  • Добрый день.

    Если вам не нравится идея описанная выше, то никто вам не мешает в класс модели добавить еще одно свойство (если модель у вас это EntityFramework, то не забудьте его пометить его атрибутом [NotMapped]). В этом доступном только для чтения свойстве проверяйте наличие картинки и пол, в зависимости от того что у вас там есть это свойство всегда будет возвращать картинку, либо считанную из базы, либо шаблонную.

    21 июня 2016 г. 5:57
    Отвечающий
  • Но не передать в конвертер второй параметр никак не получается. Подскажите пожалуйста, как это можно сделать. Какой чудотворный есть способ для этого.

    Задам вопрос как в матрице: А кто вам сказал, что параметр это простой тип?!

    Создайте сложный тип (класс, JSON, XML или что вам по душе)...

    21 июня 2016 г. 6:48
  • Но не передать в конвертер второй параметр никак не получается. Подскажите пожалуйста, как это можно сделать. Какой чудотворный есть способ для этого.

    Задам вопрос как в матрице: А кто вам сказал, что параметр это простой тип?!

    Создайте сложный тип (класс, JSON, XML или что вам по душе)...

    Я думал над этим. Можно передать не только например поле из SQLITE а передать всю запись.

    Пока не представляю как это сделать но попробую

    Интересно как передать всю запись?

    PS.

    Все оказалось просто, я сложил два поля и передал как одно. А в конвертере разложил на два.
    21 июня 2016 г. 7:33