|
IValueConverter и статический класс
|
|||
---|---|---|---|
#18+
Обычно, чтоб отобразить некий объект в нужном нам виде мы используем конвертеры при связывании. для этого мы создаем класс наследованный от интерфейса IValueConverter, затем размещаем его в ресурсах и используем с помощью разметки {StaticResource <имя статического класса>}. Но, если использовать UserControl, который будет размещаться внутри ListBox другого UserControl'а, то я не могу создать общий ресурс для всех дочерних элементов списка. Если я задам конвертер в ресурсах дочернего контрола списка, получится, что для каждого элемента списка будет создан объект конвертера, а в случаю отсутствия виртуализации, то будет созданы 1000и этих конвертеров. Нельзя ли просто создать конвертер в статическом классе, объявить для него статическое поле и обращаться через {x:Static <поле статического класс с конвертером>} и не париться? аля: DependencyProperty1="{Binding Property1, Converter={x:Static nmsp:Class1.Converter1}}" Чем это чревато, почему это может быть плохо? хочу мнения умный людей :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2015, 11:13 |
|
IValueConverter и статический класс
|
|||
---|---|---|---|
#18+
А откуда данные, что он будет создан для каждого элемента? Что-то мне представляется, что он создастся для экземпляра BindingExpression, т. е. по одному на каждый binding. По крайней мере я не помню, чтоб конвертор вызывал проблемы для больших коллекций. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2015, 13:40 |
|
IValueConverter и статический класс
|
|||
---|---|---|---|
#18+
Ilya81, он будет создан для каждого элемента, так как в каждом UserControl'е (дочернем элементе списка) будет экземляра класса конвертера в <UserControl.Resources>, так как сослаться на ресурс родительского элемента в UserControl не получится. Так же отсутствуют <App.Resources> ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2015, 13:50 |
|
IValueConverter и статический класс
|
|||
---|---|---|---|
#18+
Roman MejtesОбычно, чтоб отобразить некий объект в нужном нам виде мы используем конвертеры при связывании. для этого мы создаем класс наследованный от интерфейса IValueConverter, затем размещаем его в ресурсах и используем с помощью разметки {StaticResource <имя статического класса>}.Предпочитаю описывать конвертеры в виде расширений разметки. Базовый класс Конвертер Пример использования: Код: xml 1.
Roman MejtesНо, если использовать UserControl, который будет размещаться внутри ListBox другого UserControl'а, то я не могу создать общий ресурс для всех дочерних элементов списка. Если я задам конвертер в ресурсах дочернего контрола списка, получится, что для каждого элемента списка будет создан объект конвертера, а в случаю отсутствия виртуализации, то будет созданы 1000и этих конвертеров.Не думаю, что "клоны" конвертеров в данной ситуации окажутся тонким местом. Если конечно в них не выделяется много памяти, что мало вероятно. Roman MejtesНельзя ли просто создать конвертер в статическом классе, объявить для него статическое поле и обращаться через {x:Static <поле статического класс с конвертером>} и не париться? аля: DependencyProperty1="{Binding Property1, Converter={x:Static nmsp:Class1.Converter1}}" Чем это чревато, почему это может быть плохо? хочу мнения умный людей :)Ничего плохого в этом не вижу, если конвертерам не требуется хранить состояние. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2015, 17:41 |
|
IValueConverter и статический класс
|
|||
---|---|---|---|
#18+
Roman Mejtes, Не знаю как Вы не смогли создать общий стиль. Но вы совсем забыли, что при размещении стиля в самом первом паренте (в том числе и конвертор, так как он объявляется в ресурсах), у вас автоматом увидят его все его чайлды (даже из разных сборок). Вопрос только в том как вы в парентовый ресурс добавили стили (правильно или нет). Дизайнер студии будет ругаться, что не видит ресурс, но смело запустив приложение, вы увидите, что все гуд. 100% ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2015, 22:25 |
|
|
start [/forum/topic.php?fid=21&msg=38875878&tid=1440928]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 137ms |
0 / 0 |