powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / mdi на базе вкладок
53 сообщений из 53, показаны все 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
mdi на базе вкладок
    #37479821
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaЛучше бы ты призмы или калибурны осилил.С калабуризмами ознакомился. "В топку её" (с)
SeVaТвой так называемый менеджер пригоден только для лабораторной.И для них тоже.
SeVaНет проверок открыт ли уже документ так как это делается в VSМне нужно открытие нескольких экземпляров документов одного типа. Будет нужна такая проверка - добавится ещё строчек 10.
SeVaчастный случай без возможности составных view&viewModelКак ты можешь это утверждать, если не видел что из себя представляет класс ViewModel ( не нравится мне это название, но и во что переименовать никак не могу придумать :-) ).
SeVaнет запросов к пользователю если данные были измененыЭто мне не надо. Будет надо - добавлю.
SeVaи тд.Тоже добавлю когда будет надо.
SeVaЗЫ В новом проекте не будет ниодного диалога, без них можно спокойно обойтисьНадо средства выбирать под задачу, а не задачу подгонять под средства. Если в SL нелады с диалогами, это ещё не значит, что они не нужны.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37479900
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То, что ты показал - сочинение на вольную тему, а не работающий код. Какой-то нигде неиспользуемый MDIContainer, мутные viewmodel(есть большое подозрение, что это view), отсутствие minimize, maximize, укладывания в черепицу, как это делается в настоящих mdi, проверок открыто ли уже окно и тд.
Обсуждать тут нечего.
Калибурн работает без всяких, "если это понадобится", имеет внятный код, переносимость, документацию, примеры, полный функционал, а не выжимки, тестируется десятками тысяч человек и тд.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37479946
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaТо, что ты показал - сочинение на вольную тему, а не работающий код.Перечень ошибок, из-за которых не работает код в студию.

SeVaКакой-то нигде неиспользуемый MDIContainerМною используемый.

SeVaмутные viewmodelЕщё раз. Ты не видел что в себя включает класс ViewModel. Как можно делать какие-то выводы о его мутности?

SeVaесть большое подозрение, что это viewВ него инкапсулировано View.

SeVaотсутствие minimize, maximize, укладывания в черепицу, как это делается в настоящих mdiЭто не функционал Tabbed MDI в таком виде, в каком его понимает большинство из нас.

SeVaпроверок открыто ли уже окноЗачем спрашивать 2 раза об одном и том же?

SeVaОбсуждать тут нечего.Не хочешь - не обсуждай. Никто не заставляет. :-)

SeVaКалибурн работает без всяких, "если это понадобится"Да и флаг ему в руки...

SeVaимеет внятный кодМой код не менее внятен и гораздо более прост.

SeVaпереносимостьКуда? В линукс?

SeVaдокументацию, примерыУ меня по коду и примерам использования и так всё понятно. Коллектив не жалуется.

SeVaполный функционалКоторый на 90% не нужен в текущем проекте, и на 80% не нужен никогда. Ну и накой такое счастье?

SeVaа не выжимкиЗато имеем только то что нужно. Всё остальное не мозолит глаза.

SeVaтестируется десятками тысяч человек и тд.Их бы энергию да в мирных целях...
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37480770
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MDI контейнер - вовсе не mdi, viewmode - это view. Несколько строк, а столько мути.
Двух минут просмотра вполне достаточно, чтобы не тратить на это время дальше.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37480888
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaMDI контейнер - вовсе не mdiMDI - multi document interface. MDI необязательно делается дочерними окнами, как это по традиции сложилось в WinForms и Delphi. Даже название специально придумано - Tabbed MDI. А ты всё не веришь. :-)

SeVaviewmode - это view.В каком-то контексте класс может являться моделью, в каком-то представлением. Смотря относительно чего смотрим. Следует это знать.

Ах да, в мурзилках об этом не пишут, а свою точку зрения мы выработать не можем. Нынче это не модно. Мы можем только повторять за остальными и ломать голову над тем, каким образом впихнуть очередной невпихуемый калабуризм в текущий проект.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37481419
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В мурзилаках используют привычную всем терминологию, которые все понимают. Те, кто не ходит в школу и не любит читать, придумывают свои велосипеды. А здесь читаем(view), а здесь мы рыбу заворачивали(оказывается, что viewmodel) - откровенное пачкание мозгов
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37481435
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaВ мурзилаках используют привычную всем терминологию, которые все понимают.Авторы мурзилок часто просто зарабатывают деньги и вообще мало понимают о чём пишут.
SeVaТе, кто не ходит в школу и не любит читать, придумывают свои велосипеды.Если это что-то не сложное, зачем тянуть в проект левый калабуризм?
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37481774
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто мурзилки нужно читать правильные, на мурзилку Фаулера все ссылаются. Есть определенная, общепринятая терминология, если вместо педали газа находится тормоз, то далеко не уедешь
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37481916
mdi и wpf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок, всем спасибо за подсказки и обсуждения.
Наверное, спор можно и прекратить - с мнениями мы уже ознакомились :)

Тут еще маленький нюанс остался.
Хотелось-бы выяснить, и дело будет ок.

Мне нужен простой mdi-интерфейс, на базе TabControl.
Я на форму кинул TabControl с такой привязкой к обьектам в VM:
Код: plaintext
1.
<TabControl Grid.Row="1" Margin="3" Name="tab" ItemsSource ="{Binding Documents, Mode=TwoWay}" 
SelectedItem="{Binding SelectedDocument, Mode=TwoWay}" ItemTemplate="{StaticResource ClosableTabItemTemplate}"/> 

Осталось только более-менее грамотно научится устанавливать Header для TabItem/ClosableTabItem. Так, что-бы заголовок был по заголовку документа. Пока, как ни крутил - ни чего не получилось.

Не направите?
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482022
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdi и tabbed интерфейс - две разные педали.
Тема с заголовками неоднократно обсуждалась здесь(необходим нужный ItemContainerStyle) и в goole
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482058
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdi и wpfОсталось только более-менее грамотно научится устанавливать Header для TabItem/ClosableTabItem. Так, что-бы заголовок был по заголовку документа. Пока, как ни крутил - ни чего не получилось.

Не направите?
Код: 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.
<UserControl x:Class="SspMain.FrmMdiContainer"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:s="clr-namespace:SspMain">

    <UserControl.InputBindings>
        <KeyBinding Gesture="Ctrl+F4" Command="{Binding ActCloseTabItem}"/>
    </UserControl.InputBindings>
    
    <UserControl.Resources>

        <DataTemplate x:Key="TabItemHeaderTemplate">
            <StackPanel Orientation="Horizontal">
                <ContentControl VerticalAlignment="Center"
                                Content="{Binding}"
                                IsTabStop="False"
                                FontWeight="Bold"/>
                <Button Margin="10,2,0,2" 
                        Padding="3"
                        VerticalAlignment="Center"                     
                        Style="{s:SkinResource {x:Static ToolBar.ButtonStyleKey}}"
                        FocusVisualStyle="{x:Null}"
                        ToolTip="Закрыть (Ctrl+F4)"
                        Command="{Binding DataContext.ActCloseTabItem, RelativeSource={RelativeSource AncestorType={x:Type s:FrmMdiContainer}}}"
                        CommandParameter="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}">
                    <Image Source="Close.png"/>
                </Button>
            </StackPanel>
        </DataTemplate>

        <Style x:Key="TabItemStyle" TargetType="TabItem" BasedOn="{s:SkinStyle}">
            <Setter Property="Header" Value="{Binding Header}"/>
            <Setter Property="Content" Value="{Binding View}"/>
            <Setter Property="HeaderTemplate" Value="{StaticResource TabItemHeaderTemplate}"/>
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="VerticalContentAlignment" Value="Stretch"/>
        </Style>

    </UserControl.Resources>

    <TabControl ItemsSource="{Binding Documents.DataView}"
                ItemContainerStyle="{StaticResource TabItemStyle}"/>
</UserControl>
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482094
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaТема с заголовками неоднократно обсуждалась здесь(необходим нужный ItemContainerStyle) и в goole Ага. Вот пример с одной из твоих ссылок . Блог на MSDN, между прочим. Как бэ довольно-таки уважаемый ресурс. И что мы видим?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
private T FindVisualParent<T>( DependencyObject node ) where T : DependencyObject   
{   
    DependencyObject parent = VisualTreeHelper.GetParent( node );   
    if ( parent == null || parent is T ) 
        return (T)parent;   

    // Recurse up the visual tree.   
    return FindVisualParent<T>( parent );
}

Такое чувство, что мировое сообщество программистов постепенно деградирует.

Так что все эти калабуризмы никуда не упёрлись. Я лучше сам напишу и буду спать спокойно.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482132
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты думаешь, что RelativeSource отличается чем-то принципиально от Find? В Prims может быть любой интерфейс, который можно безболезненно сменить на другой, что я уже делал неоднократно, а у тебя только единственное, частное решение.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482137
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaТы думаешь, что RelativeSource отличается чем-то принципиально от Find? В Prims может быть любой интерфейс, который можно безболезненно сменить на другой, что я уже делал неоднократно, а у тебя только единственное, частное решение.Причём тут RelativeSource? Я тебе говорю о рекурсии там где без неё можно обойтись.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482157
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaВ Prims может быть любой интерфейс, который можно безболезненно сменить на другой, что я уже делал неоднократно, а у тебя только единственное, частное решение.Я чё-то не пойму. Неужели без калабуризма я не смогу изменить FrmMdiContainer.xaml без изменения MdiContainer.cs . Чем тут калабуризм может помочь?
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482164
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

да ты все правильно мыслишь. ты сам все можешь сделать.
и это для тебя элементарно.

Другим же впарили, что думать не надо, все придумали, представьте , что вы закупщик на заводе, просто закупайте у нас эту деталь и эту и потом сварите и будет программа.
Ктото повелся, ктото послал.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482255
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKАлексей К,

да ты все правильно мыслишь. ты сам все можешь сделать.
и это для тебя элементарно.

Другим же впарили, что думать не надо, все придумали, представьте , что вы закупщик на заводе, просто закупайте у нас эту деталь и эту и потом сварите и будет программа.
Ктото повелся, ктото послал.
Да, нет ребята, есть нормальные заводы с универсальными станками и другими поставщиками(никто сейчас не производит полностью всю продукцию), и есть гаражные шаражки с допотопным инструментарием, который кое-как склепан самостоятельно
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482265
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

во!
вся фишка в том, что нету того, кто может определить заводом или шарашкой является предмет обсуждения :)
может быть набор частных мнений, что сейчас есть, и это вызывает постоянные споры и не понимания.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482270
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaДа, нет ребята, есть нормальные заводы с универсальными станками и другими поставщиками(никто сейчас не производит полностью всю продукцию), и есть гаражные шаражки с допотопным инструментарием , который кое-как склепан самостоятельноЭто ещё надо доказать.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482273
mdi и wpf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVa,

В первый раз, наверное, лучше попробовать сделать самому.
Когда на потоке - через правильных субподрядчиков.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482274
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKДругим же впарили, что думать не надо, все придумали, представьте , что вы закупщик на заводе, просто закупайте у нас эту деталь и эту и потом сварите и будет программа.
Ктото повелся, ктото послал.Ну да. Как-то так. :-)
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482280
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdi и wpfВ первый раз, наверное, лучше попробовать сделать самому.Очень помогает при освоении новой технологии.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482319
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что здесь доказывать, взять готовый инструмент и если нужно, то за полчаса написать акцию для закрытия окон, или ждать, когда появится самопал, который еще нужно будет протестировать и отловить баги.
Если левша из гаража попадет на завод, он, конечно, будет в недоумении зачем же нужны цифровые станки.
А для лучшего понимания больше всего подходит код, а не чтение букварей. По wpf\sl нет еще такого, где все моменты объяснены
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482351
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaПо wpf\sl нет еще такого, где все моменты объясненыТо-то и оно. Авторы калабуризмов сами пока не знают как лучше. Экспериментируют. Выкладывают плоды своих экспериментов на суд общественности. А ты предлагаешь тащить их код в продакшн. Неразумно.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482616
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaПо wpf\sl нет еще такого, где все моменты объясненыТо-то и оно. Авторы калабуризмов сами пока не знают как лучше. Экспериментируют. Выкладывают плоды своих экспериментов на суд общественности. А ты предлагаешь тащить их код в продакшн. Неразумно.
Автор калибурн сам разработчик, применяет его у себя, а потом уже выкладывает, это тестируют десятки тысяч, а у тебя хотя бы один unit test есть?
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482678
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaАвтор калибурн сам разработчик, применяет его у себяЯ тоже сам разработчик. Тоже применяю свой фреймворк у себя. Между нами много общего. :-)
SeVaа потом уже выкладывает, это тестируют десятки тысячНичего особо сложного там нет, чтобы была необходимость подключать к тестированию десятки тысяч.
SeVaа у тебя хотя бы один unit test есть?Пока за них не платят. Поэтому их пока нет.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482680
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaа у тебя хотя бы один unit test есть?Пока за них не платят. Поэтому их пока нет.Хотя нет. Пожалуй они в каком-то виде есть. Есть возможность запускать методы сервисов модели при отладке через Immediate Window.
...
Рейтинг: 0 / 0
mdi на базе вкладок
    #37482692
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
off: не на вкладках, но весёленький плдход http://sunild79.wordpress.com/2007/12/02/mdi-windows-in-wpfpost-1-learning/
...
Рейтинг: 0 / 0
53 сообщений из 53, показаны все 3 страниц
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / mdi на базе вкладок
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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