Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / IValueConverter и статический класс / 5 сообщений из 5, страница 1 из 1
10.02.2015, 11:13
    #38875593
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IValueConverter и статический класс
Обычно, чтоб отобразить некий объект в нужном нам виде мы используем конвертеры при связывании.
для этого мы создаем класс наследованный от интерфейса IValueConverter, затем размещаем его в ресурсах и используем с помощью
разметки {StaticResource <имя статического класса>}.

Но, если использовать UserControl, который будет размещаться внутри ListBox другого UserControl'а, то я не могу создать общий ресурс для всех дочерних элементов списка. Если я задам конвертер в ресурсах дочернего контрола списка, получится, что для каждого элемента списка будет создан объект конвертера, а в случаю отсутствия виртуализации, то будет созданы 1000и этих конвертеров.

Нельзя ли просто создать конвертер в статическом классе, объявить для него статическое поле и обращаться через {x:Static <поле статического класс с конвертером>} и не париться? аля:
DependencyProperty1="{Binding Property1, Converter={x:Static nmsp:Class1.Converter1}}"

Чем это чревато, почему это может быть плохо? хочу мнения умный людей :)
...
Рейтинг: 0 / 0
10.02.2015, 13:40
    #38875878
Ilya81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IValueConverter и статический класс
А откуда данные, что он будет создан для каждого элемента? Что-то мне представляется, что он создастся для экземпляра BindingExpression, т. е. по одному на каждый binding. По крайней мере я не помню, чтоб конвертор вызывал проблемы для больших коллекций.
...
Рейтинг: 0 / 0
10.02.2015, 13:50
    #38875894
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IValueConverter и статический класс
Ilya81,

он будет создан для каждого элемента, так как в каждом UserControl'е (дочернем элементе списка) будет экземляра класса конвертера в <UserControl.Resources>, так как сослаться на ресурс родительского элемента в UserControl не получится. Так же отсутствуют <App.Resources>
...
Рейтинг: 0 / 0
10.02.2015, 17:41
    #38876237
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IValueConverter и статический класс
Roman MejtesОбычно, чтоб отобразить некий объект в нужном нам виде мы используем конвертеры при связывании.
для этого мы создаем класс наследованный от интерфейса IValueConverter, затем размещаем его в ресурсах и используем с помощью
разметки {StaticResource <имя статического класса>}.Предпочитаю описывать конвертеры в виде расширений разметки.
Базовый класс
Конвертер

Пример использования:
Код: xml
1.
<TextBlock Text="{Binding Value, Converter={my:CnvToString}}"/>



Roman MejtesНо, если использовать UserControl, который будет размещаться внутри ListBox другого UserControl'а, то я не могу создать общий ресурс для всех дочерних элементов списка. Если я задам конвертер в ресурсах дочернего контрола списка, получится, что для каждого элемента списка будет создан объект конвертера, а в случаю отсутствия виртуализации, то будет созданы 1000и этих конвертеров.Не думаю, что "клоны" конвертеров в данной ситуации окажутся тонким местом. Если конечно в них не выделяется много памяти, что мало вероятно.

Roman MejtesНельзя ли просто создать конвертер в статическом классе, объявить для него статическое поле и обращаться через {x:Static <поле статического класс с конвертером>} и не париться? аля:
DependencyProperty1="{Binding Property1, Converter={x:Static nmsp:Class1.Converter1}}"

Чем это чревато, почему это может быть плохо? хочу мнения умный людей :)Ничего плохого в этом не вижу, если конвертерам не требуется хранить состояние.
...
Рейтинг: 0 / 0
14.02.2015, 22:25
    #38879915
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IValueConverter и статический класс
Roman Mejtes,

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


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