powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Топик ненависти к WPF
25 сообщений из 336, страница 8 из 14
Топик ненависти к WPF
    #36688572
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУP.S. ChildWindowa525

Внимательно знакомимся с ShowDialog в WPF/WinForms/Delphi, смотрим исходники, пытаемся почуять разницу.

Юзаем ChildWindow и не ипём моск.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689077
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЮзаем ChildWindow и не ипём моск.Да там с лямбдами замучаешся. Опять же хочется иметь одинаковый прикладной код для WPF/SL.
guest2Это ты в браузере, что ли, собрался ShowDialog делать?ChildWindow есть, что мешает?
guest2Учимся делать нормальные приложения, основанные на NavigationService, а не кучу окон городить.Т. е. все существующие приложения с диалогами считаются ненормальными? Смелое утверждение. Диалог типа "Будет удалена завись. Продолжить? Да/Нет" тоже отдельной страницей делать?
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689189
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КОпять же хочется иметь одинаковый прикладной код для WPF/SL.
А смысл? Я, вот, не понимаю эту сферически фанатичную идею делать минимальные зависимости на двух различных платформах. Накойляд (с) спрашивается.
Во-вторых, никто не мешает UI планировать на юзер-контролах, а Window (WPF) и ChildWindow (сильвер) использовать как хостеров.
Алексей КДиалог типа "Будет удалена завись. Продолжить? Да/Нет" тоже отдельной страницей делать?
Ну как-раз тут всё очень просто :)
Код: plaintext
var result = MessageBox.Show("Будет удалена завись. Продолжить?", "Шняжка", MessageBoxButton.OKCancel);
P.S. Всё-таки, NavigationService, как уже говорили, более полезен в браузерных решениях. Очень удобно иметь определенные странички в закладках. Поэтому, устраивать замес WPF с сильвером, по меньшей мере, неблагоразумно. Коням - овёс, волкам - овец. Не наоборот.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689376
guest2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кguest2Учимся делать нормальные приложения, основанные на NavigationService, а не кучу окон городить.Т. е. все существующие приложения с диалогами считаются ненормальными? Смелое утверждение. Смелое, особенно учитывая, что я этого не утверждал.Алексей КДиалог типа "Будет удалена завись. Продолжить? Да/Нет" тоже отдельной страницей делать?Для этого MessageBox есть.

Я фигею - делаем за оппонента утверждения и потом героически их опровергаем.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689483
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КОпять же хочется иметь одинаковый прикладной код для WPF/SL.
А смысл? Я, вот, не понимаю эту сферически фанатичную идею делать минимальные зависимости на двух различных платформах. Накойляд (с) спрашивается.Ну на первый взгляд этот не сложно. Почему бы и нет? :-)

МСУВо-вторых, никто не мешает UI планировать на юзер-контролах, а Window (WPF) и ChildWindow (сильвер) использовать как хостеров.А это не имеет значения. Хоть как тут делай - прикладной код будет отличаться.

МСУАлексей КДиалог типа "Будет удалена завись. Продолжить? Да/Нет" тоже отдельной страницей делать?
Ну как-раз тут всё очень просто :)
Код: plaintext
var result = MessageBox.Show("Будет удалена завись. Продолжить?", "Шняжка", MessageBoxButton.OKCancel);
Ну мы-то с вами знаем, что диалоги бывают более замысловатые...

Алексей КP.S. Всё-таки, NavigationService, как уже говорили, более полезен в браузерных решениях. Очень удобно иметь определенные странички в закладках. Поэтому, устраивать замес WPF с сильвером, по меньшей мере, неблагоразумно. Коням - овёс, волкам - овец. Не наоборот.Т. е. диалоги нынче не модно? Диалоги делаются в Windows-приложениях из-за отсутствия NavigationService?
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689563
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу на первый взгляд этот не сложно. Почему бы и нет? :-)
Ну много в этой жизни, что не сложно. Так давайте же будем выдумывать феерические задачи и с гордостью их решать?
P.S. Нахненужно!

Алексей КА это не имеет значения. Хоть как тут делай - прикладной код будет отличаться.
Да, как ни крути. Шаг влево - уже расхождения с WPF.

Алексей КНу мы-то с вами знаем, что диалоги бывают более замысловатые...
ChildWindow же

Алексей КТ. е. диалоги нынче не модно? Диалоги делаются в Windows-приложениях из-за отсутствия NavigationService?
Диалоги - это замечательно. Речь о типе сильверовского проекта. Есть Silverlight Application (типа WPF как-бы) и есть Silverlight Navigation Application. Шаблоны проектов уже заряжены в VS2010. Так вот, Вам никто не запрещает юзать великолепный ChildWindow в SNA.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689640
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КНу мы-то с вами знаем, что диалоги бывают более замысловатые...
ChildWindow же Мы опять ходим по кругу. Я не говорю, что в ChildWindow нет ShowDialog. Я говорю что он неудобен. Делегат закрытия диалога возможно придётся тащить через несколько методов, если диалогов несколько. Это разьве нормально?

Код: plaintext
1.
2.
3.
myDialogService.InformationDialog("Ненавижу...", () =>
{
    // Чё-то делаем после закрытия
});

vs

Код: plaintext
1.
2.
myDialogService.InformationDialog("Ненавижу...");
// Чё-то делаем после закрытия
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689646
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А когда куча лямбд, stack trace становится весьма непонятным, что существенно затрудняет отладку.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689695
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЯ не говорю, что в ChildWindow нет ShowDialog.
Так а в нем и нет ShowDialog, в нем есть только Show :)

Алексей КЯ говорю что он неудобен. Делегат закрытия диалога возможно придётся тащить через несколько методов, если диалогов несколько. Это разьве нормально?
Зачем тащить куда-то делегат? А напрямую из вьюмодели не сутьпба?

MainViewModel.cs (типа главное окошко)
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
/// <summary>
/// Вызов окна создания/редактирования сущности Customer
/// </summary>
/// <param name="customer"></param>
private void ShowCustomerEdit(Customer customer)
{
    CustomerEditWindow window = new CustomerEditWindow();
    CustomerEditWindowModel viewModel = new CustomerEditWindowModel(owner, customer);

    // Обработчик закрытия окна
    viewModel.RequestClose += window.Close;
    // Обработчик нажатия кнопки "Сохранить"
    viewModel.RequestOk += () =>
    {
        Customer changed = new Customer()
        {
            Id = viewModel.Id.GetValueOrDefault(),
            FirstName = viewModel.FirstName,
            Email = viewModel.Email,
        };

        // Изменить
        if (customer != null)
        {
            AllCustomers[AllCustomers.IndexOf(customer)] = changed;
        }
        // Добавить
        else
        {
            AllCustomers.Add(changed);
        }

        window.Close();
    };

    window.DataContext = viewModel;
    window.Owner = owner;

    window.ShowDialog();
}

/// <summary>
/// Все сущности Customer
/// </summary>
public ObservableCollection<Customer> AllCustomers
{
    get
    {
        return allCustomers;
    }

    set
    {
        allCustomers = value;
        base.OnPropertyChanged("AllCustomers");
    }
}


CustomerEditWindow.xaml (кнопачки)
Код: plaintext
1.
<Button Content="Сохранить" Command="{Binding OkCommand}" Height="25" Width="80" IsDefault="True" />
 <Button Content="Выход" Command="{Binding CloseCommand}" Height="25" Width="80" Margin="5,0,0,0" />


CustomerEditWindowModel.cs (вызываемая модальная шняжка)
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
using System;
using System.Windows;
using System.Windows.Input;
using MvvmSample.Commands;
using MvvmSample.DataAccess;

namespace MvvmSample.ViewModel
{
    /// <summary>
    /// Модель CustomerEditWindow
    /// </summary>
    public class CustomerEditWindowModel : ViewModelBase
    {
        #region Private члены

        /// <summary>
        /// Делегат команды выхода из приложения
        /// </summary>
        private DelegateCommand closeCommand;

        /// <summary>
        /// Делегат команды нажатия кнопки "Сохранить"
        /// </summary>
        private DelegateCommand okCommand;

        #endregion

        #region Команды

        /// <summary>
        /// Команда закрытия окна
        /// </summary>
        public ICommand CloseCommand
        {
            get
            {
                closeCommand = closeCommand ?? new DelegateCommand(Close, CanClose);
                return closeCommand;
            }
        }

        /// <summary>
        /// Команда нажатия кнопки "Сохранить"
        /// </summary>
        public ICommand OkCommand
        {
            get
            {
                okCommand = okCommand ?? new DelegateCommand(Ok, CanOk);
                return okCommand;
            }
        }

        #endregion

        #region Логика модели

        /// <summary>
        /// Действие на закрытие окна
        /// </summary>
        public event Action RequestClose;

        /// <summary>
        /// Действие на нажатие кнопки "Сохранить"
        /// </summary>
        public event Action RequestOk;

        /// <summary>
        /// Можно ли закрывать окно
        /// </summary>
        /// <returns></returns>
        public bool CanClose()
        {
            return true;
        } 

        /// <summary>
        /// Закрытие окна
        /// </summary>
        public void Close()
        {
            if (RequestClose != null)
            {
                RequestClose();
            }
        }

        /// <summary>
        /// Можно ли закрывать окно
        /// </summary>
        /// <returns></returns>
        public bool CanOk()
        {
            return true;
        }

        /// <summary>
        /// Закрытие окна
        /// </summary>
        public void Ok()
        {
            if (RequestOk != null)
            {
                RequestOk();
            }
        } 

        /// <summary>
        /// Код
        /// </summary>
        public int? Id { get; set; }
        /// <summary>
        /// Имя
        /// </summary>
        public string FirstName { get; set; }
        /// <summary>
        /// Почтовый адрес
        /// </summary>
        public string Email { get; set; }

        /// <summary>
        /// Конструктор модели-представления
        /// Инициализируем модель-представление необходимыми данными
        /// </summary>
        public CustomerEditWindowModel(Window parentWindow = null, Customer customer = null)
        {
            if (customer != null)
            {
                this.Id = customer.Id;
                this.FirstName = customer.FirstName;
                this.Email = customer.Email;
            }
        }

        #endregion
    }
}


Ну как-то так :)

АлёшаА когда куча лямбд, stack trace становится весьма непонятным, что существенно затрудняет отладку.
Чё Вы к лямбдам привязались, что с ними не так? dinamyc? )
А stack trace тут как упал?
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689747
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КЯ не говорю, что в ChildWindow нет ShowDialog.
Так а в нем и нет ShowDialog, в нем есть только Show :)Дапох как он там называется.

МСУАлексей КЯ говорю что он неудобен. Делегат закрытия диалога возможно придётся тащить через несколько методов, если диалогов несколько. Это разьве нормально?
Зачем тащить куда-то делегат? А напрямую из вьюмодели не сутьпба?Ну а если какой-то код нужно выполнить после закрытия диалога. Посмотри ещё раз мой последний пример. Вот обсуждение сабжа с авторами. Их лошадиные отмазки по поводу кросплатформенности кажутся весьма неубедительными.

МСУАлёшаА когда куча лямбд, stack trace становится весьма непонятным, что существенно затрудняет отладку.
Чё Вы к лямбдам привязались, что с ними не так? dinamyc? )
А stack trace тут как упал? Ну имена методов...
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689813
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу а если какой-то код нужно выполнить после закрытия диалога.
Ёпт, опишите евент в диалоговом окне и из вызываемого окна присоситесь к нему. Ну пистец вопросы, Лёня... :(
Собственно, вариант с event Action, который я дал, так и работает. Ничего выдумывать не нужно. Контролировать можно полностью поведение вьюмодельки.

Алексей КПосмотри ещё раз мой последний пример. Вот обсуждение сабжа с авторами. Их лошадиные отмазки по поводу кросплатформенности кажутся весьма неубедительными.
Бать, дату смотрели? :) Тогда народ не знал о чилдвиндоу.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689822
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, Лёня, харэ флудить! Диалоговость в сильвере есть. И точка.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689841
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КНу а если какой-то код нужно выполнить после закрытия диалога.Ёпт, опишите евент в диалоговом окне и из вызываемого окна присоситесь к нему. Ну пистец вопросы, Лёня... :(

Собственно, вариант с event Action, который я дал, так и работает. Ничего выдумывать не нужно. Контролировать можно полностью поведение вьюмодельки.
Ну я и возмущаюсь как обойтись без них. Чё лямбды на пустом месте плодить.

МСУАлексей КПосмотри ещё раз мой последний пример. Вот обсуждение сабжа с авторами. Их лошадиные отмазки по поводу кросплатформенности кажутся весьма неубедительными.
Бать, дату смотрели? :) Тогда народ не знал о чилдвиндоу.Чилдвиндоу был создан матерящимся сообществом на следующий день после первого релиза SL.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689856
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу я и возмущаюсь как обойтись без них. Чё лямбды на пустом месте плодить.
А, Вы про эти лямбды :) Я просто подумал, что Вы хотите передавать лямбды в вызываемый попап, чтоб как-бы не типизироваться, dinamyc вона даже предложил

Алексей КЧилдвиндоу был создан матерящимся сообществом на следующий день после первого релиза SL.
Хз, может и так. Но, это же решение Вашей "проблемы"?
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689886
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КНу я и возмущаюсь как обойтись без них. Чё лямбды на пустом месте плодить.
А, Вы про эти лямбды :) Я просто подумал, что Вы хотите передавать лямбды в вызываемый попап, чтоб как-бы не типизироваться, dinamyc вона даже предложил Ну наконец-то...
МСУАлексей КЧилдвиндоу был создан матерящимся сообществом на следующий день после первого релиза SL.
Хз, может и так. Но, это же решение Вашей "проблемы"?Да нет же...
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36689917
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, вообще, если на то пошло, то как Вам вариант паттерна "батон клик"?
Никаких тебе делегатов и никаких тебе лямбд, автогенерация клик-методов рулит же.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36690061
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ Диалоговость в сильвере есть. И точка.
хороший термин. Зопесал в блокнотег


МСУА, вообще, если на то пошло, то как Вам вариант паттерна "батон клик"?
Никаких тебе делегатов и никаких тебе лямбд, автогенерация клик-методов рулит же.

pattern как pattern :) в МСДН'е куча примеров с использованием оного
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36690165
Не МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУАлексей КЯ не говорю, что в ChildWindow нет ShowDialog.
Так а в нем и нет ShowDialog, в нем есть только Show :)

Алексей КЯ говорю что он неудобен. Делегат закрытия диалога возможно придётся тащить через несколько методов, если диалогов несколько. Это разьве нормально?
Зачем тащить куда-то делегат? А напрямую из вьюмодели не сутьпба?

+
MainViewModel.cs (типа главное окошко)
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
/// <summary>
/// Вызов окна создания/редактирования сущности Customer
/// </summary>
/// <param name="customer"></param>
private void ShowCustomerEdit(Customer customer)
{
    CustomerEditWindow window = new CustomerEditWindow();
    CustomerEditWindowModel viewModel = new CustomerEditWindowModel(owner, customer);

    // Обработчик закрытия окна
    viewModel.RequestClose += window.Close;
    // Обработчик нажатия кнопки "Сохранить"
    viewModel.RequestOk += () =>
    {
        Customer changed = new Customer()
        {
            Id = viewModel.Id.GetValueOrDefault(),
            FirstName = viewModel.FirstName,
            Email = viewModel.Email,
        };

        // Изменить
        if (customer != null)
        {
            AllCustomers[AllCustomers.IndexOf(customer)] = changed;
        }
        // Добавить
        else
        {
            AllCustomers.Add(changed);
        }

        window.Close();
    };

    window.DataContext = viewModel;
    window.Owner = owner;

    window.ShowDialog();
}

/// <summary>
/// Все сущности Customer
/// </summary>
public ObservableCollection<Customer> AllCustomers
{
    get
    {
        return allCustomers;
    }

    set
    {
        allCustomers = value;
        base.OnPropertyChanged("AllCustomers");
    }
}


+
CustomerEditWindow.xaml (кнопачки)
Код: plaintext
1.
<Button Content="Сохранить" Command="{Binding OkCommand}" Height="25" Width="80" IsDefault="True" />
 <Button Content="Выход" Command="{Binding CloseCommand}" Height="25" Width="80" Margin="5,0,0,0" />


+
CustomerEditWindowModel.cs (вызываемая модальная шняжка)
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
using System;
using System.Windows;
using System.Windows.Input;
using MvvmSample.Commands;
using MvvmSample.DataAccess;

namespace MvvmSample.ViewModel
{
    /// <summary>
    /// Модель CustomerEditWindow
    /// </summary>
    public class CustomerEditWindowModel : ViewModelBase
    {
        #region Private члены

        /// <summary>
        /// Делегат команды выхода из приложения
        /// </summary>
        private DelegateCommand closeCommand;

        /// <summary>
        /// Делегат команды нажатия кнопки "Сохранить"
        /// </summary>
        private DelegateCommand okCommand;

        #endregion

        #region Команды

        /// <summary>
        /// Команда закрытия окна
        /// </summary>
        public ICommand CloseCommand
        {
            get
            {
                closeCommand = closeCommand ?? new DelegateCommand(Close, CanClose);
                return closeCommand;
            }
        }

        /// <summary>
        /// Команда нажатия кнопки "Сохранить"
        /// </summary>
        public ICommand OkCommand
        {
            get
            {
                okCommand = okCommand ?? new DelegateCommand(Ok, CanOk);
                return okCommand;
            }
        }

        #endregion

        #region Логика модели

        /// <summary>
        /// Действие на закрытие окна
        /// </summary>
        public event Action RequestClose;

        /// <summary>
        /// Действие на нажатие кнопки "Сохранить"
        /// </summary>
        public event Action RequestOk;

        /// <summary>
        /// Можно ли закрывать окно
        /// </summary>
        /// <returns></returns>
        public bool CanClose()
        {
            return true;
        } 

        /// <summary>
        /// Закрытие окна
        /// </summary>
        public void Close()
        {
            if (RequestClose != null)
            {
                RequestClose();
            }
        }

        /// <summary>
        /// Можно ли закрывать окно
        /// </summary>
        /// <returns></returns>
        public bool CanOk()
        {
            return true;
        }

        /// <summary>
        /// Закрытие окна
        /// </summary>
        public void Ok()
        {
            if (RequestOk != null)
            {
                RequestOk();
            }
        } 

        /// <summary>
        /// Код
        /// </summary>
        public int? Id { get; set; }
        /// <summary>
        /// Имя
        /// </summary>
        public string FirstName { get; set; }
        /// <summary>
        /// Почтовый адрес
        /// </summary>
        public string Email { get; set; }

        /// <summary>
        /// Конструктор модели-представления
        /// Инициализируем модель-представление необходимыми данными
        /// </summary>
        public CustomerEditWindowModel(Window parentWindow = null, Customer customer = null)
        {
            if (customer != null)
            {
                this.Id = customer.Id;
                this.FirstName = customer.FirstName;
                this.Email = customer.Email;
            }
        }

        #endregion
    }
}


Ну как-то так :)

АлёшаА когда куча лямбд, stack trace становится весьма непонятным, что существенно затрудняет отладку.
Чё Вы к лямбдам привязались, что с ними не так? dinamyc? )
А stack trace тут как упал?
МСУ, на какой помойке ты этот гомнокод откопал?
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36691522
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36691540
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понравилось решение проблемы.

Безумный herbertI meet the same problem, and I think it was because that the Tabcontrol will remove the content of current TabItem from the visual tree and add the content of the selected TabItem to the visual tree when you switch Tabs. Then as the visual tree updated, there will be loaded and unloaded event fired for the newly added control and removed control respectively.
I solved this problem by write a new tab control , which added all the items to the visual tree at the very beginning, and just make it hiden when the item was unselected, make it visible when the item was selected. This accelerate the switch speed a lot, especialy when the TabItem’s content is complex.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36691595
I love WPF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПРоблема не стоит выеденного яйца.
Порочный подход из WinForms
автор
In all my Windows Forms applications, I usually start with a common base class for forms

При более внятном варианте ViewModel first отслеживать загрузку View - совершенно лишнее. Кроме того в WPF нет никакой поддрежки наследования forms за полной ненадобностью.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36691665
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I love WPFПри более внятном варианте ViewModel first отслеживать загрузку View - совершенно лишнее.Согласен. Просто удивил сам факт этого явления. :-)

I love WPFКроме того в WPF нет никакой поддрежки наследования forms за полной ненадобностью.Да, это проблемы того топикстартера. Бог ему судья. :-)
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36691719
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I love WPFПри более внятном варианте ViewModel first отслеживать загрузку View - совершенно лишнее.С другой стороны, при написании Attached Property и т. п. - Loaded может быть просто незаменимым.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36692759
I've WPF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Незаменимых у нас нет. Создаем свойство IsInitialized. Инициализацию делаем только, если значение этого свойства = false, после инициализации переводим его в true.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36693144
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, из разряда паттерна "лапшекод". Браво, хорошие стили тут обсуждаются
...
Рейтинг: 0 / 0
25 сообщений из 336, страница 8 из 14
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Топик ненависти к WPF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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