|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
ВМоисеев>Eld Hasp, вчера, 19:55 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887597][21887597] >P.S. Мой совет Вам - тормозните чуток и изучите основы. Без этого будет очень трудно создавать WPF приложения. <А это мой Вам совет - смотрите в корень задачи и не увлекайтесь подгонкой под модное. Лишнее надо нещадно удалять. Не зная в целом что Вы реализуете, сделал очень простой пример для иллюстрации. Для WPF практически всегда нужны реализации интерфейсов Icommand и INotifyPropertyChanged Использую такую реализацию - INotifyPropertyChanged Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
И такую реализацию - Icommand Код: c# 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.
Для соединения с UC объявляю интерфейс и его реализацию Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Сам UC Код: xml 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.
ViewModel Код: c# 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.
И само окно Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
Из этого примера видно, что при правильной реализации WPF решения, задачи передачи данных от одной View другой (от панели к панели, от UC к окну и т.п.) даже не возникает. Все элементы View только ОТОБРАЖАЮТ данные, а хранятся они уже на уровне VM или Model и там же обрабатываются. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2019, 16:20 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
Petro123ViPRosиз всех местных преподов ни один не дал ссылку хоть на одну свою прогу (исключение - бешеный меринос)а где твоя на WPF? в игрушки не играю :) некогда ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2019, 16:21 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
Eld Hasp, не, так не пойдет это принудительное изменение а Моисей берет когда хочет ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2019, 16:26 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
ViPRosEld Hasp, не, так не пойдет это принудительное изменение а Моисей берет когда хочетНе понял о чем Вы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2019, 16:29 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
ViPRosв игрушки не играю :) некогда ну понятно. Не играю, не предлагаю, не анализирую. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2019, 16:49 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
ВМоисеевСударь, Вы хоть вдумайтесь, что за ахинею несёте - здесь же не митингВместо 100 страниц обсуждения (твоего кода) попробуй пример штатный в WPF что показывают. На моей памяти ты ни разу не пробовал примеры из доков и от своих товарищей. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2019, 16:58 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
>Eld Hasp, сегодня, 16:20 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887876][21887876] >Не зная в целом что Вы реализуете… <Вообще-то в целом реализую информационную систему в формате двухзвенки на базе WPF. Конкретный пример показывает реализацию взаимодействия панели А, работы с таблицей <Группы>, и панели Б ввода строкового фрагмента фильтра. Панель А есть UserControl для работы с таблицей <Группы> (см. слайд). Пользователь, используя панель Б, уточняет запрос на построение выборки из таблицы. К примеру, если введет <Х>, то в списке грида панели А останется <Хранилище>. Итак панель А: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
вызывая панель Б работы с фильтром, применяя интерфейс MainWindow Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
пользователь загружает панель Б (её не было в момент выполнения команды при.uc_ДобавитьФ("uc_Группы_Фильтр", (Object)this);) это по завершению ввода фрагмента фильтра выполняется это - private void btc_Выбор_Click… и панель Б ликвидируется. Обработка выбора в панели А: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Я не в восторге от Вашего кода и думаю, что ещё более разительно будет отличаться коды всего приложения или хотя бы коды панели А. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2019, 23:16 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
ВМоисеев>Eld Hasp, сегодня, 16:20 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887876][21887876] >Не зная в целом что Вы реализуете… <Вообще-то в целом реализую информационную систему в формате двухзвенки на базе WPF. Конкретный пример показывает реализацию взаимодействия панели А, работы с таблицей <Группы>, и панели Б ввода строкового фрагмента фильтра. Панель А есть UserControl для работы с таблицей <Группы> (см. слайд). Пользователь, используя панель Б, уточняет запрос на построение выборки из таблицы. К примеру, если введет <Х>, то в списке грида панели А останется <Хранилище>. Я не в восторге от Вашего кода и думаю, что ещё более разительно будет отличаться коды всего приложения или хотя бы коды панели А. Я интересуюсь за Ваше приложение в целом. Вы же пишите за то какие используете инструменты для реализации. Дело Ваше, конечно. Но то как Вы подходите к реализации, какие используете инструменты для этого - это не типичный для WPF подход. Ваш подход очень сильно затрудняет создание приложения в целом, так как типовые решения в WPF основаны на совершенно ином подходе к реализации. Кроме проблем с самой реализацией в Вашем подходе, возникают проблемы и с информацией. Так как так ни кто не делает, некому Вам и подсказать как же это можно реализовать. Всю информацию Вам приходится добывать и раскапывать самостоятельно. Я понимаю, что мой код Вам не понятен или не нравится, но это не изменяет того факта, что он сделан в типичном для WPF решения подходе. И там где с Вашим подходом придётся провозится неделю и с неизвестным результатом, в типов можно сделать за несколько часов. И даже если что-то не получается, то есть к кому обратиться за помощью. Так как таким образом делают все. Для всех такие решения прозрачны, читаемы и понятны. В них проще разобраться, найти ошибки и поправить. И это не просто какой-то "заговор" программистов - это официальный подход разработчика Net и WPF - фирмы MicroSoft. WPF специально "затачивается" и оптимизируется под MVVM паттерн. Он и разработан по сути именно для реализации этого паттерна. Ещё раз говорю - дело Ваше. Но то как Вы делаете, это трудно, долго, нетипично. Вы значительно, в десятки раз, сами себе затрудняете создание приложений. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2019, 23:51 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
ВМоисеев, Что я и говорил. Вы никогда не примите "не ваш код". Продоожайте хоть 100 страниц, если будут желающие. Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 10:25 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
>Eld Hasp, вчера, 23:51 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887964][21887964] >...это не типичный для WPF подход… <Согласен, видимо действительно так. При моём подходе инфосистема реализуется множеством приложений. Каждое приложение есть <MainWindow, множество UserVontrol (рабочие панели), класс глобальные переменные>. Я хочу, чтобы пользователь имел на рабочем столе только тот инструмент, что необходим в данный момент по сути решаемой задачи. Если он работает с информацией Хранилища приложений, то использует только приложение Хранилище, остальные не загружаются. Если занимается с информацией по сотрудникам, то применяет приложение - Сотрудники и т.п. Допустим использует в данный момент работает с панелью <Приложения> приложения <Хранилище>. Пример на слайде. Сканируя список сущностей <Приложения> в гриде, находит, что надо поменять поле <Группа> в конкретной сущности. Инструмента (панель Группа) работы с сущностью <Группа> на рабочем столе пока нет. Двойной клик на поле Группа выбранной строки грида активизирует загрузку панели Группа. Она занимает рабочую зону стола (MainWindow), панель Приложения становиться неактивной - сдвигается в зону ожидания рабочего стола, функциональные кнопки удаляются, чтобы не мозолили глаза. Пользователь переключается на работу с панелью Группы. По завершению работы панели Группы, если осуществлён выбор нужной группы, осуществляется подстановка в поле Группа выбранной строки панели Приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 14:37 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
ВМоисеевЕсли он работает с информацией Хранилища приложений, то использует только приложение Хранилище, остальные не загружаются.это никак не мешает использовать MVVM. Никто не требует же делать одну GOD-модель на все приложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 15:08 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
ВМоисеев>Eld Hasp, вчера, 23:51 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887964][21887964] >...это не типичный для WPF подход… <Согласен, видимо действительно так. При моём подходе инфосистема реализуется множеством приложений. Каждое приложение есть <MainWindow, множество UserVontrol (рабочие панели), класс глобальные переменные>. Я хочу, чтобы пользователь имел на рабочем столе только тот инструмент, что необходим в данный момент по сути решаемой задачи..... Как Вы подходите к реализации я примерно понял. Для Вас основа приложения это интерфейс взаимодействия с пользователем. Так создавали приложения раньше - лет 30 назад. Я тогда работал и помню первые интерфейсы ещё когда даже Norton Commander не было. Помню как их программировали, как создавали интерфейсы для выносных дисплеев, работали в них с БД, Да, это всё было, но было это 30 лет назад! Тогда не было практически ни каких инструментов (ПО) для реализации всего этого и приходилось всё делать кастомно. Этот подход во многом сохранился сейчас и в сообществе WinForms программирования. В основном, потому что там очень большое количество "старых" программистов которые закостенели и не осваивают новые инструменты. А "молодёжь" смотрит на "стариков" и думает, что такое программирование и есть правильное. Это не так. WPF же ушёл уже намного дальше. Он создавался когда уже было множество различных других инструментов для создания пользовательских интерфейсов. И к тому времени уже были опробованы множество решений и паттернов облегчающих создание приложений. MicroSoft решила, что MVVM - это самый удобный из них для приложений в её ОС. И поэтому, именно с учётом реализации в этом паттерне, и разработала WPF. Но особенностью MVVM является создание приложения начиная с Модели, то есть части приложения отвечающего за обработку данных. Этот подход значительно противоречит знаниям "старых" программистов, поэтому редко кто из них научился полноценно использовать WPF. Даже те кто использую, то (за редким и исключением) используют полностью отбрасывая весь слой WPF созданный для взаимодействия с данными. То есть фактически превращая WPF в WinForms - только используя "модное" название. Ещё раз пишу. Такое программирование ОЧЕНЬ сильно затрудняет создание приложений. ОЧЕНЬ - это в десятки раз! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 15:12 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 15:18 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 15:47 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
Eld HaspСкорее всего, это связанно, с отсутствием в WF привязок. И, соответственно, для реализации полноценного MVVM надо кастомно в View реализовывать прослушку всех свойств ViewModel. Это сложно для подавляющего большинства преподавателей. И, соответственно, они не учат этому студентов. Но в WF довольно просто использовать MVC паттерн. В нём уже функция обновления View возложена на контролер. Книге Брайана Нойеса "Привязка данных в Windows Forms", изданной на русском, уже 10 лет. Ничего сложного там нет и про MVP рассказано. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 16:02 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
Дмитрий МухEld HaspСкорее всего, это связанно, с отсутствием в WF привязок. И, соответственно, для реализации полноценного MVVM надо кастомно в View реализовывать прослушку всех свойств ViewModel. Это сложно для подавляющего большинства преподавателей. И, соответственно, они не учат этому студентов. Но в WF довольно просто использовать MVC паттерн. В нём уже функция обновления View возложена на контролер. Книге Брайана Нойеса "Привязка данных в Windows Forms", изданной на русском, уже 10 лет. Ничего сложного там нет и про MVP рассказано.Сложного нет! Согласен! Но костность "стариков" не позволяет это освоить. Если же сравнивать с WPF, то в WinForms сделать правильно всё же намного сложнее. Но лучше и проще чем делать неправильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 16:11 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
Eld HaspДмитрий Мухпропущено... Книге Брайана Нойеса "Привязка данных в Windows Forms", изданной на русском, уже 10 лет. Ничего сложного там нет и про MVP рассказано.Сложного нет! Согласен! Но костность "стариков" не позволяет это освоить. Если же сравнивать с WPF, то в WinForms сделать правильно всё же намного сложнее. Но лучше и проще чем делать неправильно. Старики старикам - рознь :) MVC, MVP, MVVM ведь "старики" и придумали. The MVC pattern was originally conceived in 1978-79 by Trygve Reenskaug and had the primary goal of providing an interface for users to manipulate multiple views of data as if working with real world entities. Взято отсюда: Interactive Application Architecture Patterns . Просто многим банально лень изучать что-либо. Хотя в институте вроде объясняли, что лучшие практики, подходы и технологии всегда на чём-то основаны :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 16:26 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
Eld HaspЕсли же сравнивать с WPF, то в WinForms сделать правильно всё же намного сложнее. Так ведь интереснее пробовать приложить различные архитектурные подходы там, где за тебя это не сделали. Писать свои компоненты, а не использовать сторонние. И вот одни "старики" в своё время это сделали. И теперь результатами их труда пользуется множество разработчиков. А другие "старики" как говнокодили, так и продолжают. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 16:40 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
>Eld Hasp, сегодня, 15:12 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21888203][21888203] >...то есть части приложения отвечающего за обработку данных… <Что Вы понимаете под обработкой данных? У меня сущности хранятся либо в списках, либо ObservableCollection. Что нужно с ними делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 16:46 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
Дмитрий МухСтарики старикам - рознь :) Просто многим банально лень изучать что-либо. Хотя в институте вроде объясняли, что лучшие практики, подходы и технологии всегда на чём-то основаны :) Так и есть. Я писал о подавляющем большинстве. Сам я тоже "старик" - если 30 лет назад уже работал программистом... Дмитрий МухEld HaspЕсли же сравнивать с WPF, то в WinForms сделать правильно всё же намного сложнее. Так ведь интереснее пробовать приложить различные архитектурные подходы там, где за тебя это не сделали. Писать свои компоненты, а не использовать сторонние. И вот одни "старики" в своё время это сделали. И теперь результатами их труда пользуется множество разработчиков. А другие "старики" как говнокодили, так и продолжают.Осознанно пробовать и придумывать новое - это одно. А "тормозить" из-за костности на старом - это другое. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 16:56 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
Eld HaspДмитрий Мухпропущено... Так ведь интереснее пробовать приложить различные архитектурные подходы там, где за тебя это не сделали. Писать свои компоненты, а не использовать сторонние. И вот одни "старики" в своё время это сделали. И теперь результатами их труда пользуется множество разработчиков. А другие "старики" как говнокодили, так и продолжают.Осознанно пробовать и придумывать новое - это одно. А "тормозить" из-за костности на старом - это другое. Первое - это любознательность. Второе - это лень, прокрастинация, невежество. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 17:00 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
ВМоисеев>Eld Hasp, сегодня, 15:12 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21888203][21888203] >...то есть части приложения отвечающего за обработку данных… <Что Вы понимаете под обработкой данных? У меня сущности хранятся либо в списках, либо ObservableCollection. Что нужно с ними делать?Я не знаю, что, конкретно, с ними можно сейчас сделать. Для этого надо знать целиком Ваше приложение, так как оно, очень вероятно, изначально спроектировано неверно. А ошибки проектирования косметическими мерами не исправишь. Если есть желание научиться правильному созданию WPF приложения и есть время на это, то можно учиться на Вашем. Но его, скорее всего, придётся переделывать полностью. И начинать надо будет с этапа проектирования. Будет желание - пишите. Чем смогу помогу. В данном же случае, надо хотя бы целиком знать Вашу View. Чтобы понимать где что с чем стыкуется, где какие данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 17:04 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
Eld HaspВ данном же случае, надо хотя бы целиком знать Вашу View. Чтобы понимать где что с чем стыкуется, где какие данные.Oh no! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 17:14 |
|
Взаимодействие UserControl в рамках приложения
|
|||
---|---|---|---|
#18+
>Eld Hasp, сегодня, 17:04 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21888262][21888262] >Я не знаю, что, конкретно, с ними можно сейчас сделать. <Я не точно сформулировал мысль - что делать с моими данными я знаю, но что Вы подразумеваете под обработкой ваших данных. И потом, ObservableCollection показываю в гриде так: Код: c# 1. 2. 3. 4. 5.
если это Вам что-то говорит, а то расчирикались насчет привязок. И так использую: Код: c# 1. 2. 3. 4. 5. 6.
и сущности во всех панелях имеют одинаковые имена, и списки тоже. Хотя Вам об этом рановато. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 18:25 |
|
|
start [/forum/topic.php?fid=21&msg=39814890&tid=1440327]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
3926ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 286ms |
total: | 4322ms |
0 / 0 |