|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Всем привет. А у кого-нибудь реально получалось в проектам шарить скажем usercontrols между SL и WPF? ЗЫ Видел пару туториалов на этот счет, но как-то верится с трудом что это достижимо в более-менее реальном приложении. Но ай как хочется поверить=) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2011, 17:08 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
sandypВсем привет. А у кого-нибудь реально получалось в проектам шарить скажем usercontrols между SL и WPF? ЗЫ Видел пару туториалов на этот счет, но как-то верится с трудом что это достижимо в более-менее реальном приложении. Но ай как хочется поверить=) Это из области фантастики. Все остальное очень даже можно ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2011, 21:34 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Я шарю. Создаю два проекта. Один для WPF, другой для SL. Соответственно, во втором проекте те-же исходники, только добавлены в него "As Link". Получаются из одного набора исходников две Dll. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2011, 18:50 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Придётся отказаться от WPF-ного ShowDialog. Придётся сделать его через жопу как в SL через BeginInvoke. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2011, 09:29 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Алексей КПридётся отказаться от WPF-ного ShowDialog. Придётся сделать его через жопу как в SL через BeginInvoke. Зачем через BeginInvoke? Рисуется единый интерфейс - IDialogService с ShowDialog(...), создаются нужные реализации для WPF и SL с обычными ShowDialog, с таким подходом в остальном коде отличий не будет ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2011, 22:05 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Dmitry V. LiseevЯ шарю. Создаю два проекта. Один для WPF, другой для SL. Соответственно, во втором проекте те-же исходники, только добавлены в него "As Link". Получаются из одного набора исходников две Dll. Удобней это делать с помощью Project Link, который позволяет "шарить" весь проект. При создании нового файла он на автомате появляется во втором. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2011, 22:08 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Очепятался - Project Linker ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2011, 22:10 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
SeVaАлексей КПридётся отказаться от WPF-ного ShowDialog. Придётся сделать его через жопу как в SL через BeginInvoke. Зачем через BeginInvoke? Рисуется единый интерфейс - IDialogService с ShowDialog(...), создаются нужные реализации для WPF и SL с обычными ShowDialog, с таким подходом в остальном коде отличий не будетОтличия будут независимо от того, как будет оформлен вызов окна. Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 05:59 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
При желании можно сделать все. Для SL вариант следующий: 1. Создаем UserControl на основе ChildVindow, рисуем ему кнопки : OKButton; CancelButton Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Вариант использования dialogService.ShowDialog(myViewModel, (res) => { if(res){ //ОкButtonClick} else{//CancelButtonClick}} ); ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 07:02 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
SeVaВариант использования dialogService.ShowDialog(myViewModel, (res) => { if(res){ //ОкButtonClick} else{//CancelButtonClick}} );Я же сказал, что не нужен метод с лямбдой. Нужен СИНХРОННЫЙ вызов "как в делфи, винформз, ВПФ и прочих...". Код: plaintext 1. 2.
Если покажешь как такое сделать в SL - многие будут благодарны. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 08:03 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Вдогонку: для WPF твой пример будет выглядеть как-то так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Задача - сделать аналогичный сервис для SL. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 08:06 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Чуток лишнего скопипастил... Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 08:11 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Алексей КSeVaВариант использования dialogService.ShowDialog(myViewModel, (res) => { if(res){ //ОкButtonClick} else{//CancelButtonClick}} );Я же сказал, что не нужен метод с лямбдой. Нужен СИНХРОННЫЙ вызов "как в делфи, винформз, ВПФ и прочих...". Код: plaintext 1. 2.
Если покажешь как такое сделать в SL - многие будут благодарны. Я уже показал, мне не нужен bool. Синхронность в SL - это маразм, который я даже рассматривать не собираюсь. C таким подходом однозначно будет несовместимость кода SL и WPF (я рассматриваю только такие варианты), а самое главное - доводилось наблюдать говнокод на 15-20 листах на одной только форме. После подобного рефакторинга от него ничего не оставалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 09:10 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
МСУАлексей К Код: plaintext
:) Обсуждение ?? vs Nullable<T>.GetValueOrDefault достойно отдельного топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 09:13 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
SeVaЯ уже показал, мне не нужен bool.А я показал, что мне не нужна лямбда. Традиционный ShowDialog на мой взгляд гораздо удобнее. Спорить тут можно вечно. Если тебе нравится для реализации последовательно открываемых диалогов городить "лесенку" из лямбд и извращаться с RX - твоё право ( хотя для этого лучше использовать вот это ), спорить не стану. Я всего лишь констатировал факт, что с ShowDialog написать "SL/WPF code sharing" не так тривиально, как может показаться на первый взгляд. Придётся убить приятную возможность WPF-а обёртыванием ShowDialog в BeginInvoke. Типа так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
SeVaСинхронность в SL - это маразм, который я даже рассматривать не собираюсь.Что в твоём понимании в данном случае означает "синхронность"? Блокирование UI-потока? Этого не происходит. Значит всё в порядке. Проверенный веками ShowDialog со своим циклом обработки сообщений тоже имеет право на жизнь. SeVaC таким подходом однозначно будет несовместимость кода SL и WPF (я рассматриваю только такие варианты), а самое главное - доводилось наблюдать говнокод на 15-20 листах на одной только форме. После подобного рефакторинга от него ничего не оставалось.Это уже к теме не относится. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 09:27 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
SeVaC таким подходом однозначно будет несовместимость кода SL и WPFСобственно, что я и говорил. Только способ работы с диалогами в SL обуславливается не какими-то его преимуществами, а невозможностью реализации нормального ShowDialog из-за ограничений, накладываемых API Internet Explorer и прочих. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 09:37 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Алексей КSeVaЯ уже показал, мне не нужен bool.А я показал, что мне не нужна лямбда. Традиционный ShowDialog на мой взгляд гораздо удобнее. Спорить тут можно вечно. Если тебе нравится для реализации последовательно открываемых диалогов городить "лесенку" из лямбд и извращаться с RX - твоё право ( хотя для этого лучше использовать вот это ), спорить не стану. Я всего лишь констатировал факт, что с ShowDialog написать "SL/WPF code sharing" не так тривиально, как может показаться на первый взгляд. Придётся убить приятную возможность WPF-а обёртыванием ShowDialog в BeginInvoke. Типа так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
SeVaСинхронность в SL - это маразм, который я даже рассматривать не собираюсь.Что в твоём понимании в данном случае означает "синхронность"? Блокирование UI-потока? Этого не происходит. Значит всё в порядке. Проверенный веками ShowDialog со своим циклом обработки сообщений тоже имеет право на жизнь. SeVaC таким подходом однозначно будет несовместимость кода SL и WPF (я рассматриваю только такие варианты), а самое главное - доводилось наблюдать говнокод на 15-20 листах на одной только форме. После подобного рефакторинга от него ничего не оставалось.Это уже к теме не относится. К теме не относятся последовательные лесенки. Я подобного нигде не видел и не увижу. Если тебе нравится создавать проблемы, а потом их героически преодалевать, то флаг в руки. А Rx мне дейстительно нравится, Coroutines и близко не стояли. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 10:05 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
SeVaК теме не относятся последовательные лесенки. Я подобного нигде не видел и не увижу.Просто ты не сталкивался с такими задачами. Код: plaintext 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.
Типовая задача с диалогами для принятия решения "чё дальше делать", "сохранять/не сохранять" и т. п. Ещё чуть-чуть усложнить, раскидать всё это по методам разных сервисов - и ты запаришся разбираться куда какую лямбду передать, какой диалог из какой лямбды закрывать, и т. п. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 10:30 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Именно лямбды позволяют применять краткий функциональный подход, а не городить муторные лесенки из if. Чтобы в этом убедиться, достаточно посмотреть как обустроен сервис навигации prism(весь в лямдах). "че делать дальше?" тоже присутствует и тоже на лямде. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 11:45 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
SeVaИменно лямбды позволяют применять краткий функциональный подход, а не городить муторные лесенки из if.Хотел написать в ответ что-то тоже абстрактно-концептуальное, но передумал. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 12:24 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Банально, имеем какой-то глобально-базовый класс диалога с кнопками "применить/отмена" на все случаи жизни. В нём событие: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Сделай аналогичный функционал на лямбдах и сравни прикладной код обоих подходов. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 12:36 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
В Prism подобное делается гораздо внятней Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Никаких лестниц при этом не наблюдается и без лапшекода во view ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 18:10 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Сервис навигации prism перед закрытием окна на автомате вызывает ConfirmNavigationRequest, прописываем его в базовом классе, навсегда забываем об if. Если что-то не устваивает, то переопределяем метод. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2011, 18:18 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
SeVaВ Prism подобное делается гораздо внятнейОй да ладно. Как по мне - так хреновина какая-то. Решение должно быть простым. Тут простоты не наблюдается. SeVaНикаких лестниц при этом не наблюдается и без лапшекодаЧто такое лапшекод? Какая часть приведённого мной примера является лапшекодом? SeVaво viewНе буду же я городить вьюмодели для этого примера. Ну перенесётся это во вьюмодель - что от этого изменится. Лямбд меньше не станет. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2011, 05:53 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
SeVaСервис навигации prism перед закрытием окна на автомате вызывает ConfirmNavigationRequest, прописываем его в базовом классе, навсегда забываем об if. Если что-то не устваивает, то переопределяем метод.Что мешает перенести if в базовый класс во всех других случаях? Ничего не мешает. А вот таскать continuationCallback между разными окнами, в случае чуть сложнее одного диалога подтверждения, когда их может быть несколько - это да... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2011, 06:03 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Алексей КА вот таскать continuationCallback между разными окнами, в случае чуть сложнее одного диалога подтверждения, когда их может быть несколько - это да...Да и с одним окном таскать его между методами лениво. Сегодня он где-то там не нужен, завтра понадобится только из-за того, что view поменялся и стал требовать дополнительного диалога. Нуегонах... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2011, 07:25 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
1. Меняется не View, а бизнес-логика. 2. Я уже писал, что если нужны изменения, то переопределяем метод. 3. callback никто с собой не таскает, он зашит в сервисе навигации. Рассуждения о том, что во рту могут вырости грибу - не аргументы. Чтобы они не росли есть простые правила гигиены - отсутствие таких "общих" решений с обработчиками событий и code-behind как у тебя. Ты даже этот простой вариант обобщить не можешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2011, 08:41 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
SeVaРассуждения о том, что во рту могут вырости грибу - не аргументы. Чтобы они не росли есть простые правила гигиены - отсутствие таких "общих" решений с обработчиками событий и code-behind как у тебя. Ты даже этот простой вариант обобщить не можешь.2-й раз уже повторяю, причём тут code-behind. В нём сделано чтобы пример был проще. Принципиальных отличий обработчика события от биндинга на ICommand во вьюмодели в данном случае нет. Впрочем ладно, проехали... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2011, 11:23 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
SeVa1. Меняется не View, а бизнес-логика.Как ни странно, View тоже может измениться. SeVa2. Я уже писал, что если нужны изменения, то переопределяем метод.Ну это понятно, полиморфизм возможен только при использовании sliverlight-style ShowDialog. :-) SeVa3. callback никто с собой не таскает, он зашит в сервисе навигации.А вызывающий код должен его вызвать, поэтому его возможно придётся таскать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2011, 11:44 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
Алексей КSeVaРассуждения о том, что во рту могут вырости грибу - не аргументы. Чтобы они не росли есть простые правила гигиены - отсутствие таких "общих" решений с обработчиками событий и code-behind как у тебя. Ты даже этот простой вариант обобщить не можешь.2-й раз уже повторяю, причём тут code-behind. В нём сделано чтобы пример был проще. Принципиальных отличий обработчика события от биндинга на ICommand во вьюмодели в данном случае нет. Впрочем ладно, проехали... Принципиальные отличия есть и очень большие: - жесткая связанность - усложнение кода и невнятность - обработчики и события с потенциальной возможностью утечек ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2011, 13:04 |
|
SL/WPF code sharing
|
|||
---|---|---|---|
#18+
SeVaПринципиальные отличия есть и очень большие: - жесткая связанность - усложнение кода и невнятность - обработчики и события с потенциальной возможностью утечекНу а в контексте обсуждаемого вопроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2011, 13:09 |
|
|
start [/forum/topic.php?all=1&fid=21&tid=1442184]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 19ms |
total: | 180ms |
0 / 0 |