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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ок, ладно. Сделаю как Алексей К написал выше.
...
Рейтинг: 0 / 0
11.10.2011, 16:00
    #37477447
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mdi на базе вкладок
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
11.10.2011, 17:23
    #37477597
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mdi на базе вкладок
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
11.10.2011, 17:26
    #37477601
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mdi на базе вкладок
mdi и wpfЕсли сделать tabcontrol на View и привязать его к коллекции документов на ViewModel, то с этим ясно, так я умею делать.Можно ещё унаследовать контрол от TabControl и реализовать всё там, но этот способ мне нравится меньше. Хотя, он наверное тоже имеет право на жизнь.
...
Рейтинг: 0 / 0
11.10.2011, 19:21
    #37477806
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mdi на базе вкладок
Алексей К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
12.10.2011, 06:17
    #37478143
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mdi на базе вкладок
SeVaPrismы и прочие калабуризмы имеют уже готовые решения без всякой жесткой связанностиДа чё все помешались на слабой связности. Серебрянная пуля? Пилюля от всех бед? Ну пишите тогда на PHP или ещё на чём без строгой типизации... А мне это не надо.
SeVaи позволяют писать код без маразма с обработчиками в стиле DelphiЭто-то каким боком тут? Всё через RelayCommand, в лучших традициях. Правда думал взять модель команд из того же калибурна, чтобы делать привязку к методам напрямую, без ICommand. Но чё-то пока не решаюсь.
...
Рейтинг: 0 / 0
12.10.2011, 10:22
    #37478323
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mdi на базе вкладок
Именно серебряная. Применительно к теме топика, она позволяет:
- в несколько десятков строк наковырять оконный менеджер
- сменить затем на любой другой(tab, mdi никому не нужны в LOB) не меняя остальной код
...
Рейтинг: 0 / 0
12.10.2011, 10:32
    #37478345
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mdi на базе вкладок
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
12.10.2011, 22:36
    #37479668
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mdi на базе вкладок
SeVamdi никому не нужны в LOB
...
Рейтинг: 0 / 0
13.10.2011, 00:54
    #37479773
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mdi на базе вкладок
Алексей К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
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / mdi на базе вкладок / 25 сообщений из 53, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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