Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MultiValueConverter / 8 сообщений из 8, страница 1 из 1
25.03.2014, 13:00
    #38595623
ЧитательX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MultiValueConverter
Проблема связывания Image.Source через MultiValueConverter
Чтобы не мутить мозги читателям написал немного демо-кода:
В основе: некоторая картинка ( Image1.png ), которую привязываю к Image разными способами.
Привязка через MultiValueConverter не работает. Подскажите почему.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<Window>
...
  <Window.Resources>
    <wpf1:CMyMultiConverter x:Key="MyMultiConverter"/>
    <wpf1:CMyConverter x:Key="MyConverter"/>
  </Window.Resources>

  <Grid>
    <StackPanel Orientation="Vertical">
    

      <!--Работает-->
      <Image Source="/Image1.png" Height="50" Width="50" Stretch="Fill"/>
			
      <!--Работает-->
      <Image Height="50" Width="50" Stretch="Fill">
        <Image.Source>/Image1.png</Image.Source>
      </Image>
			
      <!--Работает-->
      <Image Height="50" Width="50" Stretch="Fill" Source="{Binding Converter={StaticResource MyConverter}}" />

      <!--Не работает ??? -->
      <Image Height="50" Width="50" Stretch="Fill">
        <Image.Source>
          <MultiBinding Converter="{StaticResource MyMultiConverter}" />
        </Image.Source>
      </Image>

    </StackPanel>
  </Grid>
</Window>


К этому XAML-у прилагается два конвертора простой и непростой:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class CMyConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {			
    return @"/Image1.png";
  }
  ...
}

public class CMyMultiConverter : IMultiValueConverter
{
  public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    return @"/Image1.png";
  }
  ...
}
...
Рейтинг: 0 / 0
25.03.2014, 13:30
    #38595668
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MultiValueConverter
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
  public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
       var result = new BitmapImage();
       result.BeginInit();
       result.UriSource = new Uri("...");
       result.EndInit();
       return result;
  }

?

зы: Может проще триггером?
...
Рейтинг: 0 / 0
25.03.2014, 20:01
    #38596288
ЧитательX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MultiValueConverter
Спасибо за подсказку. Попробую.
...
Рейтинг: 0 / 0
01.04.2014, 10:18
    #38601597
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MultiValueConverter
Алексей К
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
  public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
       var result = new BitmapImage();
       result.BeginInit();
       result.UriSource = new Uri("...");
       result.EndInit();
       return result;
  }

?

зы: Может проще триггером?
Это что, при каждом изменении привязанного свойства будет аллоцироваться целая картинка? Предлагаю при старте приложения заинициализировать все такие картинки в словарь ресурсов или ещё куда и брать картинки из него. Т. е. в коде выше будет не инициализация каждый раз, а просто забор картинки из словаря по ключу, который в values будет. Кстати, можно, наверное, и без мультибайндинга обойтись будет.

У меня, по крайней мере, так сделано. Только словарь должен быть либо в репозитории, либо статичным (читай, глобальным) ресурсом.
...
Рейтинг: 0 / 0
01.04.2014, 10:25
    #38601605
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MultiValueConverter
user7320Это что, при каждом изменении привязанного свойства будет аллоцироваться целая картинка? Предлагаю при старте приложения заинициализировать все такие картинки в словарь ресурсов или ещё куда и брать картинки из него. Т. е. в коде выше будет не инициализация каждый раз, а просто забор картинки из словаря по ключу, который в values будет. Кстати, можно, наверное, и без мультибайндинга обойтись будет.Именно этого эффекта можно добиться при использовании триггера, что сразу и было предложено.
...
Рейтинг: 0 / 0
01.04.2014, 10:41
    #38601621
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MultiValueConverter
Алексей Кuser7320Это что, при каждом изменении привязанного свойства будет аллоцироваться целая картинка? Предлагаю при старте приложения заинициализировать все такие картинки в словарь ресурсов или ещё куда и брать картинки из него. Т. е. в коде выше будет не инициализация каждый раз, а просто забор картинки из словаря по ключу, который в values будет. Кстати, можно, наверное, и без мультибайндинга обойтись будет.Именно этого эффекта можно добиться при использовании триггера, что сразу и было предложено.
Пример?
...
Рейтинг: 0 / 0
01.04.2014, 10:47
    #38601625
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MultiValueConverter
user7320Алексей Кпропущено...
Именно этого эффекта можно добиться при использовании триггера, что сразу и было предложено.
Пример?Пример чего? ResourceDictionary + Style + Trigger (MultiTrigger) + Setter на свойство Image ?
...
Рейтинг: 0 / 0
01.04.2014, 11:13
    #38601657
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MultiValueConverter
Алексей Кuser7320пропущено...

Пример?Пример чего? ResourceDictionary + Style + Trigger (MultiTrigger) + Setter на свойство Image ?
Да, но картинки-то должны всё равно быть предзагружены-прединициализированы? Я именно на это обратить внимание хотел.

Да, вроде, у ТСа они и так в ресурсах сидят. Просто он в коде конвертера зачем-то пути начал писать, а не из ресурсов считывать.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MultiValueConverter / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]