|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
МСУuser7320Как видите, я делаю это в одну строчку за - сколько там? - скажем, 60 символов. Вы сможете за 60 символов достать эти два свойства? Нет, вы будете писать рефлексивный код вида И что дальше-то? Бери и проверяй рефилексией все свойства. "Движок" пишется один раз (в виде хелпера или в виде расширения) и используется в программе по недобности. Но у них же есть готовый "движок" для задания атрибутов, для свойств и прочих плюшек - почему нет готового для считывания значений с атрибутов? Почему я не могу поставить точку, выбрать коллекцию "Атрибуты" и выбрать один из заданных атрибутов, а потом одно из его свойств? Почему я должен сам это писать, да и, как тут некоторые говорят, без кодогенерации (всякие Т4) это может и не получиться? Т. е. задать атрибуты - дело новичка и студента, а считать - дело профи и всяких мастеров кодогенерации. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 06:09 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Алексей Кuser7320целый фреймворк могу понаписать, да. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вы мне тут не это... Полный код (в виде конвертера, но это неважно - функция, она и в Африке функция) выглядит так (без всяких проверок на наллы и прочих исключений): Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 06:16 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Проверки на наллы всё же оставил, хотя не все - при использовании as тоже надо проверку делать. Плюс ещё мог что-то упустить. В любом случае, то, что написал Алексей К. - только часть. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 06:18 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Да, я этот конвертер использовал в замле, который многословен как XML, поэтому разметка захламлялась. Пришлось отказаться. В принципе, этот же код надо куда-нибудь в более удобное... расширение или ещё чего там запихать. Чтобы в том же замле, скажем, можно было через точку делать доступ. Да я и написал по подсказке - индексируемые свойства в модели представления, которые позволяют, через точку указывая названия атрибута и имена свойств, получать нужное значение. Другое дело, что тут нет Интеллисенса (он вообще и в замле-то плохо работает, стоит углубиться куда-нибудь в байндинги) и придумана своя нотация, да плюс костыли - эти "указывать через точку" на самом деле строка-ключ словаря, так что никакого рефакторинга нормально не провернёшь. Но замл, похоже, вообще на автоматический рефакторинг (в отличие от C# кода, где какая-то утилитка предлагает заменить все упоминания названия изменённой переменной) не рассчитан. Тоже мне не очень нравится, но хоть что-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 06:24 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Вот, а должно всё через точку или как там вызываться - т. е. за меня кто-то должен нагенерировать для каждого объекта, для которого установлены атрибуты, коллеции этих установленных атрибутов и их свойств (свойств атрибутов, блин!). Т. е. чтобы Интеллисенс работал и изменения названий и всех упоминаний свойств и атрибутов делались парой кликов мышки там - ну, как для "обычного" кода всё сделано. Я что, многого прошу? Просто хочу, чтобы было НОРМАЛЬНО. Вот. Да. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 06:29 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Но у них же есть готовый "движок" для задания атрибутов, для свойств и прочих плюшек - почему нет готового для считывания значений с атрибутов? Почему нету, а GetCustomAttributes чем не устраивает? Тебе за минуту был написал класс "ЛютыйФреймворк" с нужным расширением, бери и юзай. user7320Почему я не могу поставить точку, выбрать коллекцию "Атрибуты" и выбрать один из заданных атрибутов, а потом одно из его свойств? Наверное потому, что фреймворк писался не только для тебя. user7320Почему я должен сам это писать Потому что программист должен писать код, так обычно принято. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 09:40 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Да, я этот конвертер использовал в замле, который многословен как XML, поэтому разметка захламлялась. Пришлось отказаться.Пора уже определиться, к чему эти претензии. К System.Reflection или к WPF ? Рефлекшен, это вещь довольно фундаментальная. Она не обязана быть заточена чисто под WPF. Да и появился рефлекшен гораздо раньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 10:03 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Вдогонку: если продолжать в том же ключе, можно дойти и до требований поддержки INotifyPropertyChanged , DependencyProperty и т. п. на уровне базового супертипа Object . ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 10:07 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Сравнивать рефлексию с впф - это как как сравнивать почтового голубя с мылом Впринципе, сходств не мало. Но и не сказать, что прям-таки одно и тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 10:08 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Вы мне тут не это... Полный код (в виде конвертера, но это неважно - функция, она и в Африке функция) выглядит так (без всяких проверок на наллы и прочих исключений) Повторюсь, про расширение разметки. Мне кажется, что такая постановка задачи будет более удобна: Код: xml 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 10:16 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Вы мне тут не это... Полный код (в виде конвертера, но это неважно - функция, она и в Африке функция) выглядит так (без всяких проверок на наллы и прочих исключений) Повторюсь, про расширение разметки. Мне кажется, что такая постановка задачи будет более удобна: Код: xml 1. 2. 3. 4.
Штука в том, что атрибуты не в модели представления, а в модели. Т. е. вот так взять и напрямую указать атрибуты модели представления нельзя, т. к. их нет. Поэтому я и делал через конвертер, т. к. конвертер - часть модели представления и имеет доступ к модели. Поэтому приходилось в параметр конвертера передавать составной объект, содержащий в себе тип модели, имя свойства модели, тип атрибута, имя свойства атрибута. Ну, в вашем расширении, наверное, примерно то же будет (только четыре раза надо будет указать - четыре параметра же), если это расширение будет иметь доступ к модели. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 11:29 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Ну, в вашем расширении, наверное, примерно то же будет (только четыре раза надо будет указать - четыре параметра же), если это расширение будет иметь доступ к модели. Только как же это муторно будет - мало того, что четыре параметра надо указать, так ещё для каждого параметра идентификатор (для типа это Type), а ещё для каждого идентификатора и параметра - пространство имён замл. В результате получится всего лишь раза так в два меньше, чем через конвертеры. Через конвертеры вот так Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 11:33 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Алексей Кпропущено... Повторюсь, про расширение разметки. Мне кажется, что такая постановка задачи будет более удобна: Код: xml 1. 2. 3. 4.
Штука в том, что атрибуты не в модели представления, а в модели. Т. е. вот так взять и напрямую указать атрибуты модели представления нельзя, т. к. их нет. Поэтому я и делал через конвертер, т. к. конвертер - часть модели представления и имеет доступ к модели. Поэтому приходилось в параметр конвертера передавать составной объект, содержащий в себе тип модели, имя свойства модели, тип атрибута, имя свойства атрибута. Ну, в вашем расширении, наверное, примерно то же будет (только четыре раза надо будет указать - четыре параметра же), если это расширение будет иметь доступ к модели. Штука в том, что расширение разметки PropertyDescriptionMetadataExtension может брать метаданные откуда угодно: из атрибутов, из БД, из XML файла или ещё откуда. Для этого ему даже необязательно иметь ссылку на ViewModel, в приведённом примере её и нет. Ты зациклился на своём решении. Попробуй посмотреть на задачу свежим взглядом. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 11:45 |
|
|
start [/forum/topic.php?fid=20&msg=38147100&tid=1405185]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 162ms |
0 / 0 |