powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / SL/WPF code sharing
25 сообщений из 33, страница 1 из 2
SL/WPF code sharing
    #37394614
sandyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. А у кого-нибудь реально получалось в проектам шарить скажем usercontrols между SL и WPF?

ЗЫ Видел пару туториалов на этот счет, но как-то верится с трудом что это достижимо в более-менее реальном приложении.
Но ай как хочется поверить=)
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37394789
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sandypВсем привет. А у кого-нибудь реально получалось в проектам шарить скажем usercontrols между SL и WPF?

ЗЫ Видел пару туториалов на этот счет, но как-то верится с трудом что это достижимо в более-менее реальном приложении.
Но ай как хочется поверить=)

Это из области фантастики. Все остальное очень даже можно
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37396489
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я шарю. Создаю два проекта. Один для WPF, другой для SL. Соответственно, во втором проекте те-же исходники, только добавлены в него "As Link". Получаются из одного набора исходников две Dll.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37397052
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придётся отказаться от WPF-ного ShowDialog. Придётся сделать его через жопу как в SL через BeginInvoke.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398543
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПридётся отказаться от WPF-ного ShowDialog. Придётся сделать его через жопу как в SL через BeginInvoke.

Зачем через BeginInvoke?
Рисуется единый интерфейс - IDialogService с ShowDialog(...), создаются нужные реализации для WPF и SL с обычными ShowDialog, с таким подходом в остальном коде отличий не будет
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398547
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. LiseevЯ шарю. Создаю два проекта. Один для WPF, другой для SL. Соответственно, во втором проекте те-же исходники, только добавлены в него "As Link". Получаются из одного набора исходников две Dll.

Удобней это делать с помощью Project Link, который позволяет "шарить" весь проект.
При создании нового файла он на автомате появляется во втором.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398549
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очепятался - Project Linker
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398728
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaАлексей КПридётся отказаться от WPF-ного ShowDialog. Придётся сделать его через жопу как в SL через BeginInvoke.
Зачем через BeginInvoke?
Рисуется единый интерфейс - IDialogService с ShowDialog(...), создаются нужные реализации для WPF и SL с обычными ShowDialog, с таким подходом в остальном коде отличий не будетОтличия будут независимо от того, как будет оформлен вызов окна.
Код: plaintext
1.
2.
3.
4.
//WPF
var dialogResult = WindowService.ShowDialog(content); //внутри свой цикл обработки сообщений

//SL
WindowService.ShowDialog(content, dialogResult => ... );
В итоге прикладной код будет разным. В SL как в WPF не сделать. А в WPF как в SL сделать можно, завернув вызов ShowDialog в BeginInvoke. Тогда получится сделать WindowService текой же как в SL, с лямбдой. Но пользоваться этой хнёй будет неудобно.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398750
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При желании можно сделать все.
Для 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.
public partial class Dialog : ChildWindow
{
    public Action<bool> CloseAction { get; set; }
    public object ViewModel { get; set; }

     publbic Dialog()
    {
        InitializeComponent();
        DataContext = viewModel; //должен быть задан implicit style для typeof(viewModel) или делаем другой вариант с ContentControl
    }       
   
    private void OKButton_Click(object sender, RoutedEventArgs e)
    {
        CloseAction(true);            
    }

    private void CancelButton_Click(object sender, RoutedEventArgs e)
    {
        CloseAction(false);           
    }
}

2. Реализуем IDialogService
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
public class DialogService : IDialogService
{
    public void ShowDialog(object viewModel, Action<bool> сallback)
    {
        var dialog = new Dialog() {ViewModel = viewModel,  CloseAction = callback};
        dialog.Show();
    }
}

Вариант использования
dialogService.ShowDialog(myViewModel,
(res) => { if(res){ //ОкButtonClick} else{//CancelButtonClick}}
);
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398773
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaВариант использования
dialogService.ShowDialog(myViewModel,
(res) => { if(res){ //ОкButtonClick} else{//CancelButtonClick}}
);Я же сказал, что не нужен метод с лямбдой. Нужен СИНХРОННЫЙ вызов "как в делфи, винформз, ВПФ и прочих...".

Код: plaintext
1.
2.
//БЕЗ ЛЯМБДЫ!!!

var dialogResult = WindowService.ShowDialog(content);

Если покажешь как такое сделать в SL - многие будут благодарны.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398775
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку: для WPF твой пример будет выглядеть как-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
public class DialogService : IDialogService
{
    public bool ShowDialog(object viewModel)
    {
        var dialog = new Dialog() {ViewModel = viewModel,  CloseAction = callback};
        return dialog.ShowDialog() ?? false;
    }
}

Задача - сделать аналогичный сервис для SL.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398778
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чуток лишнего скопипастил...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
public class DialogService : IDialogService
{
    public bool ShowDialog(object viewModel)
    {
        var dialog = new Dialog() { ViewModel = viewModel };
        return dialog.ShowDialog() ?? false;
    }
}
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398824
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К
Код: plaintext
return dialog.ShowDialog() ?? false;

:)
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398852
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaВариант использования
dialogService.ShowDialog(myViewModel,
(res) => { if(res){ //ОкButtonClick} else{//CancelButtonClick}}
);Я же сказал, что не нужен метод с лямбдой. Нужен СИНХРОННЫЙ вызов "как в делфи, винформз, ВПФ и прочих...".

Код: plaintext
1.
2.
//БЕЗ ЛЯМБДЫ!!!

var dialogResult = WindowService.ShowDialog(content);

Если покажешь как такое сделать в SL - многие будут благодарны.
Я уже показал, мне не нужен bool. Синхронность в SL - это маразм, который я даже рассматривать не собираюсь.
C таким подходом однозначно будет несовместимость кода SL и WPF (я рассматриваю только такие варианты), а самое главное - доводилось наблюдать говнокод на 15-20 листах на одной только форме. После подобного рефакторинга от него ничего не оставалось.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398855
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей К
Код: plaintext
return dialog.ShowDialog() ?? false;

:) Обсуждение ?? vs Nullable<T>.GetValueOrDefault достойно отдельного топика.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398877
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaЯ уже показал, мне не нужен bool.А я показал, что мне не нужна лямбда. Традиционный ShowDialog на мой взгляд гораздо удобнее. Спорить тут можно вечно. Если тебе нравится для реализации последовательно открываемых диалогов городить "лесенку" из лямбд и извращаться с RX - твоё право ( хотя для этого лучше использовать вот это ), спорить не стану. Я всего лишь констатировал факт, что с ShowDialog написать "SL/WPF code sharing" не так тривиально, как может показаться на первый взгляд. Придётся убить приятную возможность WPF-а обёртыванием ShowDialog в BeginInvoke. Типа так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
// Теперь в WPF диалоги такие же не удобные как в SL.
public class DialogService : IDialogService
{
    public void ShowDialog(object viewModel, Action<bool> сallback)
    {
        var dialog = new Dialog() { ViewModel = viewModel,  CloseAction = callback};
        dialog.Dispatcher.BeginInvoke(() => dialog.Show());
    }
}

SeVaСинхронность в SL - это маразм, который я даже рассматривать не собираюсь.Что в твоём понимании в данном случае означает "синхронность"? Блокирование UI-потока? Этого не происходит. Значит всё в порядке. Проверенный веками ShowDialog со своим циклом обработки сообщений тоже имеет право на жизнь.

SeVaC таким подходом однозначно будет несовместимость кода SL и WPF (я рассматриваю только такие варианты), а самое главное - доводилось наблюдать говнокод на 15-20 листах на одной только форме. После подобного рефакторинга от него ничего не оставалось.Это уже к теме не относится.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398898
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaC таким подходом однозначно будет несовместимость кода SL и WPFСобственно, что я и говорил.

Только способ работы с диалогами в SL обуславливается не какими-то его преимуществами, а невозможностью реализации нормального ShowDialog из-за ограничений, накладываемых API Internet Explorer и прочих.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398932
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaЯ уже показал, мне не нужен bool.А я показал, что мне не нужна лямбда. Традиционный ShowDialog на мой взгляд гораздо удобнее. Спорить тут можно вечно. Если тебе нравится для реализации последовательно открываемых диалогов городить "лесенку" из лямбд и извращаться с RX - твоё право ( хотя для этого лучше использовать вот это ), спорить не стану. Я всего лишь констатировал факт, что с ShowDialog написать "SL/WPF code sharing" не так тривиально, как может показаться на первый взгляд. Придётся убить приятную возможность WPF-а обёртыванием ShowDialog в BeginInvoke. Типа так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
// Теперь в WPF диалоги такие же не удобные как в SL.
public class DialogService : IDialogService
{
    public void ShowDialog(object viewModel, Action<bool> сallback)
    {
        var dialog = new Dialog() { ViewModel = viewModel,  CloseAction = callback};
        dialog.Dispatcher.BeginInvoke(() => dialog.Show());
    }
}

SeVaСинхронность в SL - это маразм, который я даже рассматривать не собираюсь.Что в твоём понимании в данном случае означает "синхронность"? Блокирование UI-потока? Этого не происходит. Значит всё в порядке. Проверенный веками ShowDialog со своим циклом обработки сообщений тоже имеет право на жизнь.

SeVaC таким подходом однозначно будет несовместимость кода SL и WPF (я рассматриваю только такие варианты), а самое главное - доводилось наблюдать говнокод на 15-20 листах на одной только форме. После подобного рефакторинга от него ничего не оставалось.Это уже к теме не относится.

К теме не относятся последовательные лесенки. Я подобного нигде не видел и не увижу. Если тебе нравится создавать проблемы, а потом их героически преодалевать, то флаг в руки.
А Rx мне дейстительно нравится, Coroutines и близко не стояли.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37398987
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
class D2 : Window
{
...
}

class D1 : Window
{
    void btnOkClick(object sender, EventArgs e)
    {
        var d2 = new D2();
        if (d2.ShowDialog() == false)
             return;
        
         //тут чё-то делаем...

         DialogResult = true;
    }
}

///////////////////////////////////////////


var d1 = new D1();
if (d1.ShowDialog())
    // тут чё-то делаем...

Типовая задача с диалогами для принятия решения "чё дальше делать", "сохранять/не сохранять" и т. п. Ещё чуть-чуть усложнить, раскидать всё это по методам разных сервисов - и ты запаришся разбираться куда какую лямбду передать, какой диалог из какой лямбды закрывать, и т. п.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37399141
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно лямбды позволяют применять краткий функциональный подход, а не городить муторные лесенки из if. Чтобы в этом убедиться, достаточно посмотреть как обустроен сервис навигации prism(весь в лямдах). "че делать дальше?" тоже присутствует и тоже на лямде.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37399264
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaИменно лямбды позволяют применять краткий функциональный подход, а не городить муторные лесенки из if.Хотел написать в ответ что-то тоже абстрактно-концептуальное, но передумал. :-)
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37399299
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Банально, имеем какой-то глобально-базовый класс диалога с кнопками "применить/отмена" на все случаи жизни. В нём событие:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class AcceptDialog : Window
{
     public event CancelEventHandler Accepted = delegate { };

     void btnAcceptClick(object sender, EventArgs e)
     {
           var cea = new CancelEventArgs();
           Accepted(this, cea);
           if (e.Cancel == false)
                DialogResult = true;
     }
}

/////////////////////////////

var d = new AcceptDialog();
d.Accepted = (s, e) =>
     e.Cancel = someOtherDialog.ShowDialog() == false;
d.ShowDialog();

Сделай аналогичный функционал на лямбдах и сравни прикладной код обоих подходов.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37400134
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Prism подобное делается гораздо внятней

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class ComposeEmailViewModel : NotificationObject, IConfirmNavigationRequest
{

 //....


//при попытке пользователя закрыть окно, выводим сообщение для  подтверждения
void IConfirmNavigationRequest.ConfirmNavigationRequest(
          NavigationContext navigationContext, Action<bool> continuationCallback)
{
    this.confirmExitInteractionRequest.Raise(
              new Confirmation {Content = "Данные были изменены.bla-bla", Title = "...."},
              c => {continuationCallback(c.Confirmed);});
}


Никаких лестниц при этом не наблюдается и без лапшекода во view
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37400142
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервис навигации prism перед закрытием окна на автомате вызывает ConfirmNavigationRequest, прописываем его в базовом классе,
навсегда забываем об if. Если что-то не устваивает, то переопределяем метод.
...
Рейтинг: 0 / 0
SL/WPF code sharing
    #37400649
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaВ Prism подобное делается гораздо внятнейОй да ладно. Как по мне - так хреновина какая-то. Решение должно быть простым. Тут простоты не наблюдается.
SeVaНикаких лестниц при этом не наблюдается и без лапшекодаЧто такое лапшекод? Какая часть приведённого мной примера является лапшекодом?
SeVaво viewНе буду же я городить вьюмодели для этого примера. Ну перенесётся это во вьюмодель - что от этого изменится. Лямбд меньше не станет.
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / SL/WPF code sharing
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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