|
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 |
|
|
start [/forum/topic.php?fid=21&fpage=49&tid=1442184]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 9ms |
total: | 147ms |
0 / 0 |