powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / mdi на базе вкладок
25 сообщений из 53, страница 1 из 3
mdi на базе вкладок
    #37475258
mdi и wpf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-нибудь разбирал этот пример?
Делаю mdi-интерфейс на базе tabcontrol, практически точь-в-точь как сделано там.
Вроде сделал, работает как надо.

Но есть косячёк - при переключении закладок таба, элемент UserControl как-бы остается "на месте".
Скажем, у меня 2 принципиально разных UserControl. При переключении с одного таб на другой, где должны быть привязаны принципиально разные UserControl - все ок. При переключении табов с разными экземлярами одного и того-же - ситуация как будто они не переключаются. Т.е., если смотреть по этому примеру (это в качестве иллюстрации), я делаю 2 вкладки для добавления нового клиента, в одну из них начинаю вводить информацию, переключаюсь на другую вкладку - ситуация, как будто переключения не произошло и введенная информация для добавления та-же.

В какую сторону стоит покопать, что-бы решить проблему?
Выложить весь проект не могу, но может кто-то уже сталкивался с подобной ситуацией.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37475937
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdi и wpf
В какую сторону стоит покопать, что-бы решить проблему?
Лучше не искать проблемы и не связываться с mdi совсем. Он полностью несовместим с wpf.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37475973
mdi и wpf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVa,

Десятая студия разве не на wpf сделана?
Даже если не на wpf, как по вашему организовать работу с несколькими документами и возможностью быстрого переключения?
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37475974
kopiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, по-моему форма с закладками это скорее SDI, а не MDI.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37475987
mdi и wpf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня сейчас такая общая задача.
Есть набор наследников от UserControl - нужно через набор вкладок на форме организовать работу с ними в рамках модели MVVM.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37476581
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdi и wpfВ какую сторону стоит покопать, что-бы решить проблему?

Взять готовый фрейворк и не изобретать велосипед.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37476811
йцукенгш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVamdi и wpfВ какую сторону стоит покопать, что-бы решить проблему?

Взять готовый фрейворк и не изобретать велосипед.
А какой?
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37476854
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kopievКстати, по-моему форма с закладками это скорее SDI, а не MDI.Нет.

По теме. Это надо уметь писать самостоятельно. Если не получается самостоятельно реализовать Tabbed MDI - надо или бросать проект, или более детально изучать WPF. Эту типовую задачу можно считать этаким тестом на профпригодность. Тут не Делфи, где накидал контролов на форму и всё как-то заработало. Без базовых знаний по WPF и устоявшихся практик ничего не получится.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37476941
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КkopievКстати, по-моему форма с закладками это скорее SDI, а не MDI.Нет.

По теме. Это надо уметь писать самостоятельно. Если не получается самостоятельно реализовать Tabbed MDI - надо или бросать проект, или более детально изучать WPF. Эту типовую задачу можно считать этаким тестом на профпригодность. Тут не Делфи, где накидал контролов на форму и всё как-то заработало. Без базовых знаний по WPF и устоявшихся практик ничего не получится.
А что подразумевается под Таbbed MDI?
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37476970
mdi и wpf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К,

Полностью согласен с тем, что нужно уметь все это делать самостоятельно.
Поэтому и делаю, и разбираюсь.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37477048
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaА что подразумевается под Таbbed MDI?Способ навигации между документами?
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37477124
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdi и wpfБерём концепцию MVVM. Делаем ViewModel. В ней свойство с коллекцией открытых документов (она в данном случае является Model) + логика по их добавлению, созданию, уничтожению и т. п. Прикручиваем к ней View (UserControl). На View удобнее всего разместить TabControl, забинденный на коллекцию документов во ViewModel. Стилями/шаблонами/датабиндингом добиваемся нужного внешнего вида и функционала табконтрола.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37477213
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КView (UserControl). На View удобнее всего разместить TabControl, забинденный на коллекцию документов во ViewModel.

Какая-то путаница в показаниях(никакой tabcontrol на View не должен быть). ЧТо под этим подразумевается?
И кто и кого биндит?
ЗЫ Описан простой tabbed интерфейс, а не tabbed-mdi, который в VS. Две большие разницы.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37477236
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaКакая-то путаница в показаниях.Путаница в самом понятии MVVM. Я бы на месте авторов идеологии назвал его VM-V и не парил общественности мозг.

SeVaникакой tabcontrol на View не должен бытьЭто ещё надо доказать.

SeVaЧТо под этим подразумевается? И кто и кого биндит?Что может быть очевиднее чем:
Код: plaintext
<TabControl ItemsSource="{Binding Documents}"/>

SeVaЗЫ Описан простой tabbed интерфейс, а не tabbed-mdi, который в VS. Две большие разницы.Никакой.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37477271
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaЗЫ Описан простой tabbed интерфейс, а не tabbed-mdi, который в VS. Две большие разницы.Или я не написал, что в HeaderTemplate TabItem-а как правило вставляется кнопочка "закрыть". Не?
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37477422
mdi и wpf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> никакой tabcontrol на View не должен быть

Если сделать tabcontrol на View и привязать его к коллекции документов на ViewModel, то с этим ясно, так я умею делать.

В том примере все строится на базе HeaderedContentControl.

Ок, ладно. Сделаю как Алексей К написал выше.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37477447
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdi и wpf> никакой tabcontrol на View не должен быть

Если сделать tabcontrol на View и привязать его к коллекции документов на ViewModel, то с этим ясно, так я умею делать.

В том примере все строится на базе HeaderedContentControl.

Ок, ладно. Сделаю как Алексей К написал выше.

Ребята, учите матчасть. Какие tabcontrol на View? MVVM проще паренной репы, но этого не скажешь о wpf. Со своим пижонством(все уже давно готово у других)и нежеланием смотреть, что сделано другими, вы так и будете кодировать в стиле Delphi, а в wpf совсем другие подходы. Все, что нужно - создать свой контрол(MyView) и добавить его в tabcontrol - TabControl.Items.Add(MyView).
Те кто в танке и знают о implicit style, могут просто добавить ViewModel в ItemsSource.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37477597
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaРебята, учите матчасть.Да.
SeVaКакие tabcontrol на View?Без коментариев.
SeVaMVVM проще паренной репыДа
SeVaно этого не скажешь о wpfТам тоже всё просто, главное понять его основную идею.
SeVaСо своим пижонством(все уже давно готово у других)и нежеланием смотреть, что сделано другимиКалибурн? Призм? МввмЛайт? Ага, в добрый путь...
SeVaвы так и будете кодировать в стиле Delphi"Всё новое - хорошо забытое старое" (с) Отбрасывать весь накопленный опыт довольно легкомысленно.
SeVaа в wpf совсем другие подходы.И да, и нет.
SeVaВсе, что нужно - создать свой контрол(MyView)Создали. Чем по твоему является документ, добавляемый в коллекцию Documents?
SeVaи добавить его в tabcontrol - TabControl.Items.Add(MyView).И получить зависимость логики управления документами от класса TabControl. Здравствуй жёсткая связность. Зато кругом диконтейнеры и регионманагеры. А чё толку... А завтра надоест табконтрол, захочется какой-нибудь гламурнотрёхмерной муйни в качестве контейнера документов, чтобы всё двигалось и летало при навигации между документами. В моём примере только во View контейнера документов я заменю родной TabControl на DevXtraOneSuperPuper3DCarouselControl. Всё остальное останется без изменений. А что делать в твоём случае я не знаю.
SeVaТе кто в танке и знают о implicit styleХотел сказать implicit data template? Знаем, знаем.
SeVaмогут просто добавить ViewModel в ItemsSourceЧуть выше об этом и писалось.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37477601
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdi и wpfЕсли сделать tabcontrol на View и привязать его к коллекции документов на ViewModel, то с этим ясно, так я умею делать.Можно ещё унаследовать контрол от TabControl и реализовать всё там, но этот способ мне нравится меньше. Хотя, он наверное тоже имеет право на жизнь.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37477806
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaРебята, учите матчасть.Да.
SeVaКакие tabcontrol на View?Без коментариев.
SeVaMVVM проще паренной репыДа
SeVaно этого не скажешь о wpfТам тоже всё просто, главное понять его основную идею.
SeVaСо своим пижонством(все уже давно готово у других)и нежеланием смотреть, что сделано другимиКалибурн? Призм? МввмЛайт? Ага, в добрый путь...
SeVaвы так и будете кодировать в стиле Delphi"Всё новое - хорошо забытое старое" (с) Отбрасывать весь накопленный опыт довольно легкомысленно.
SeVaа в wpf совсем другие подходы.И да, и нет.
SeVaВсе, что нужно - создать свой контрол(MyView)Создали. Чем по твоему является документ, добавляемый в коллекцию Documents?
SeVaи добавить его в tabcontrol - TabControl.Items.Add(MyView).И получить зависимость логики управления документами от класса TabControl. Здравствуй жёсткая связность. Зато кругом диконтейнеры и регионманагеры. А чё толку... А завтра надоест табконтрол, захочется какой-нибудь гламурнотрёхмерной муйни в качестве контейнера документов, чтобы всё двигалось и летало при навигации между документами. В моём примере только во View контейнера документов я заменю родной TabControl на DevXtraOneSuperPuper3DCarouselControl. Всё остальное останется без изменений. А что делать в твоём случае я не знаю.
SeVaТе кто в танке и знают о implicit styleХотел сказать implicit data template? Знаем, знаем.
SeVaмогут просто добавить ViewModel в ItemsSourceЧуть выше об этом и писалось.

Если бы ты не был пижоном, а разобрался хоты с одним фрейворком, то, возможно, понял, что такое wpf.
Prismы и прочие калабуризмы имеют уже готовые решения без всякой жесткой связанности(в саliburn достаточно только добавить viewmodel в коллекцию, остальное все делается на автомате) и позволяют писать код без маразма с обработчиками в стиле Delphi, к которому ты привык и никак не можешь с ним расстаться. Какой был смысл в переходе? Никакого
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37478143
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaPrismы и прочие калабуризмы имеют уже готовые решения без всякой жесткой связанностиДа чё все помешались на слабой связности. Серебрянная пуля? Пилюля от всех бед? Ну пишите тогда на PHP или ещё на чём без строгой типизации... А мне это не надо.
SeVaи позволяют писать код без маразма с обработчиками в стиле DelphiЭто-то каким боком тут? Всё через RelayCommand, в лучших традициях. Правда думал взять модель команд из того же калибурна, чтобы делать привязку к методам напрямую, без ICommand. Но чё-то пока не решаюсь.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37478323
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно серебряная. Применительно к теме топика, она позволяет:
- в несколько десятков строк наковырять оконный менеджер
- сменить затем на любой другой(tab, mdi никому не нужны в LOB) не меняя остальной код
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37478345
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaИменно серебряная. Применительно к теме топика, она позволяет:
- в несколько десятков строк наковырять оконный менеджер
Модель оконного менеджера в несколько десятков строк без IoC
Код: 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.
    public class MdiContainer : ViewModel<FrmMdiContainer>
    {
        public static MdiContainer I
        {
            get { return Singleton.GetInstance<MdiContainer>(); }
        }

        public ListCursor<ViewModel> Documents { get { return _Documents; } }
        ListCursor<ViewModel> _Documents = new ListCursor<ViewModel>();

        public void OpenDocument(ViewModel document)
        {
            document.Parent = this;
            try
            {
                document.Initialize();
                Documents.Add(document);
                UIElementHelper.FocusContentOrThis(ViewEx);
            }
            catch
            {
                document.Parent = null;
                throw;
            }
        }

        void CloseDocument(ViewModel document)
        {
            if (Documents.DataSource.Remove(document) == false)
                throw new InvalidOperationException("Data.DataSource.Remove(document) == false");
            try
            {
                document.Close();
            }
            finally
            {
                document.Parent = null;
            }
        }

        #region ActCloseTabItem

        public RelayCommand<ViewModel> ActCloseTabItem
        {
            get
            {
                if (_ActCloseTabItem == null)
                    _ActCloseTabItem = new RelayCommand<ViewModel>(ActCloseTabItemExecute);
                return _ActCloseTabItem;
            }
        }
        RelayCommand<ViewModel> _ActCloseTabItem;

        void ActCloseTabItemExecute(ViewModel document)
        {
            if (Documents.HasItems)
                CloseDocument(document ?? Documents.Current);
        }

        #endregion
    }

SeVatab, mdi никому не нужны в LOBДиалоги тоже не нужны, ага...
SeVaсменить затем на любой другой не меняя остальной код Легко и непринуждённо...
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37479668
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVamdi никому не нужны в LOB
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37479773
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaИменно серебряная. Применительно к теме топика, она позволяет:
- в несколько десятков строк наковырять оконный менеджер
+
Модель оконного менеджера в несколько десятков строк без IoC
Код: 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.
    public class MdiContainer : ViewModel<FrmMdiContainer>
    {
        public static MdiContainer I
        {
            get { return Singleton.GetInstance<MdiContainer>(); }
        }

        public ListCursor<ViewModel> Documents { get { return _Documents; } }
        ListCursor<ViewModel> _Documents = new ListCursor<ViewModel>();

        public void OpenDocument(ViewModel document)
        {
            document.Parent = this;
            try
            {
                document.Initialize();
                Documents.Add(document);
                UIElementHelper.FocusContentOrThis(ViewEx);
            }
            catch
            {
                document.Parent = null;
                throw;
            }
        }

        void CloseDocument(ViewModel document)
        {
            if (Documents.DataSource.Remove(document) == false)
                throw new InvalidOperationException("Data.DataSource.Remove(document) == false");
            try
            {
                document.Close();
            }
            finally
            {
                document.Parent = null;
            }
        }

        #region ActCloseTabItem

        public RelayCommand<ViewModel> ActCloseTabItem
        {
            get
            {
                if (_ActCloseTabItem == null)
                    _ActCloseTabItem = new RelayCommand<ViewModel>(ActCloseTabItemExecute);
                return _ActCloseTabItem;
            }
        }
        RelayCommand<ViewModel> _ActCloseTabItem;

        void ActCloseTabItemExecute(ViewModel document)
        {
            if (Documents.HasItems)
                CloseDocument(document ?? Documents.Current);
        }

        #endregion
    }

SeVatab, mdi никому не нужны в LOBДиалоги тоже не нужны, ага...
SeVaсменить затем на любой другой не меняя остальной код Легко и непринуждённо...

Лучше бы ты призмы или калибурны осилил.
Твой так называемый менеджер пригоден только для лабораторной.
Нет проверок открыт ли уже документ так как это делается в VS, частный случай без возможности составных view&viewModel, нет запросов к пользователю если данные были изменены и тд.
ЗЫ В новом проекте не будет ниодного диалога, без них можно спокойно обойтись
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 1 из 3
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / mdi на базе вкладок
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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