|
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
||||||||||||||||
WPF Поиск дочернего элемента по имени в DependencyObject01.05.2019, 06:05. Показов 5617. Ответов 27
Разобрался как добавить вкладку TabItem в TabControl с помощью XAML разметки, а не создавая потом в ней все элементы кодом.
Можно получать доступ к нужным полям, например так
TabItem и другие элементы наследует от DependencyObject. Возможно написать функцию принимающую DependencyObject корневого элемента, имя элемента в разметки и возвращающую искомый элемент, который может находится в глубине дерева элементов, а не быть первым потомком. Добавлено через 9 минут Ещё почему DependencyObject? Иногда и в загруженном шаблоне надо пометь значение некоторого поля перед тем как его назначить элементу. Добавлено через 4 часа 1 минуту Работает это
0
|
||||||||||||||||
| 01.05.2019, 06:05 | |
|
Ответы с готовыми решениями:
27
Simple_html_dom поиск дочернего элемента Поиск последнего дочернего элемента и добавление следующего в xml-документе XML: по имени элемента (тега) и/или имени атрибута у элемента (у тега) выдать соответствующее значение |
|
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
|||||||||||
| 02.05.2019, 07:54 [ТС] | |||||||||||
Нашёл где готовая функция. Ожидал, что она должна быть.
0
|
|||||||||||
|
Модератор
|
|
| 02.05.2019, 13:01 | |
|
Archi0, а чем вызваны эти "танцы с бубном"?
Вы описываете то, что Вы делаете, как сами себе ставите задачи и их решаете. А цель всего этого? Что Вы хотите в целом реализовать? Какой-то навороченный UserControl?
0
|
|
|
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
|
| 02.05.2019, 15:11 [ТС] | |
|
TabControl в котором открываются вкладки в зависимости от того что выбрали в меню.
В этих вкладках отображаются каталоги или карточка элемента каталога.
0
|
|
|
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
|
| 02.05.2019, 15:17 [ТС] | |
|
Выше макет, который выполнял в отдельном проекте.
Контрольный пример из программы в которую импортировал макеты вкладок в DataTempate
0
|
|
|
Модератор
|
||
| 02.05.2019, 15:25 | ||
|
А для чего Вы делаете все эти поиски в UI элементах? Конечно, такие методы можно использовать в рамках View. Допустим, как я писал, при создании навороченного UserControl. Но в данном случае зачем? Тем более, как я понял, у Вас обрабатывается в одном коде не только View часть, но и данные. А это, вообще, недопустимо!
0
|
||
|
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
||||||
| 02.05.2019, 15:36 [ТС] | ||||||
FundsToGrid заполняет Grid
0
|
||||||
|
Модератор
|
||
| 02.05.2019, 15:42 | ||
|
Дело Ваше, но имейте ввиду, что WPF очень сильно "заточен" под MVVM. И использование WPF вне этого паттерна катастрофически усложняет программирование. Далее самых простых реализаций Вы не сможете пойти. Мой совет, притормозите чуток. Разберитесь с MVVM. И не используйте WPF без этого паттерна. Иначе Вы сами себе создаёте огромные трудности, которые в конце концов станут непреодолимыми.
1
|
||
|
|
|||||||||||||||||||||
| 02.05.2019, 16:16 | |||||||||||||||||||||
|
Archi0, посмотрел код. И представил какой будет дальше ад. Я бы прислушался к Элд Хасп.
Добавлено через 3 минуты Я могу даже набросать простой пример. Сразу скажу, не пишите руками всякие классы ViewModelBase и т.д. Используйте готовое. Я использую в примерах GalaSoft.MvvmLight, но есть и другие библиотеки. Например, здесь на форуме есть мной написанный пример, как используя подход из библиотеки Prism открывать и закрывать окна в рамках MVVM.Добавлено через 3 минуты Вот этот пример: Архитектура MVVM в многооконном приложении Добавлено через 21 минуту Archi0, я хочу сказать вот что. С подходом MVVM у вас будет примерно следующее:Будет класс, например, MainViewModel, который будет содержать в себе коллекцию других вью моделей, каждая из которых будет представлять вкладку. Например
ListView или DataGrid, и будет заполняться UI автоматически после добавления данных, например, в ObservableCollection<FundVeiwModel>. То есть не придётся работать с UI элементами, а будет нужно лишь работать с вью моделями, не нужно будет получать данные поиском UI элементов и вытягивания с них текста, UI будет обновляться автоматически. В общем, если нужно, могу набросать пример.Добавлено через 3 минуты Далее нужно будет объявить DataTemplate для каждого типа вкладки и DataTemplateSelector, который будет подставлять нужный DataTemplate взависимости от того, какой тип вью модели у каждой конкретной вкладки. Для FundsVeiwModel свой DataTemplate, для другого типа вкладки другой. Таким подходом вы сильно упрощаете себе работу и отбрасываете огромный пласт ошибок и лишней работы.
2
|
|||||||||||||||||||||
|
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
|||||||||||
| 02.05.2019, 17:16 [ТС] | |||||||||||
|
Если я внутри DataTemplate напишу
этот код не повлиял на Grid
0
|
|||||||||||
|
Модератор
|
|||||||
| 02.05.2019, 17:30 | |||||||
|
Хоть самые азы, основы прочитайте! Привязка может быть только к ПУБЛИЧНЫМ СВОЙСТВАМ. И они должны поддерживать INPC! Должно быть так (пример возможной реализации)
1
|
|||||||
|
|
||||||||||||||||||||||||||
| 02.05.2019, 19:34 | ||||||||||||||||||||||||||
|
Вот потратил 2 часа. Набросал проект (по ссылке можно скачать исходники из
Git репозитория).Здесь выложу лишь часть кода. По ссылке можно получить проект, я что-то исправлю, запушу, вам уже не нужно скачивать проект снова, вы можете выполнить команду git pull и получить все изменения. Это сильно ускоряет разработку. Сам проект прикрепил. По Git на YouTube есть много видео. Рекомендую скачать SmartGit или SourceTree. Дальше можно брать проект за основу и обсуждать, что как делается.
1
|
||||||||||||||||||||||||||
|
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
|
| 03.05.2019, 05:08 [ТС] | |
|
Как обработчик нажатия кнопки в меню может получить экземпляр TabHostViewModelBase, чтобы добавить в него вкладку?
0
|
|
|
|
|||||||||||||||||||||
| 03.05.2019, 11:32 | |||||||||||||||||||||
|
Из
UI можно привязываться используя биндинги (Binding). Биндинг видит данные для привязки, которые находятся в свойстве DataContext. Мы в окне указали, что в DataContext находится экземпляр MainViewModel, как раз то, что нам и нужно:
Вот так можно привязаться к команде:
git pull).Добавлено через 3 минуты Поясню в чём моя логика. В базовый класс мы добавляем только общий функционал без конкретики, который в теории подойдёт для переиспользования в другой программе, например. Ведь по идее мы должны уметь добавлять вкладки, вот я в базовом классе создал такую команду. А вот уже в конкретной программе мы определяем конкретную логику добавления в классе наследнике MainViewModel, где и прописываем все условия и проверки перед добавлением, вот поэтому существует абстрактный метод CreateNewTab.
2
|
|||||||||||||||||||||
|
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
||||||||||||||||
| 04.05.2019, 04:26 [ТС] | ||||||||||||||||
|
Пункты меню Открыть сначала спрашивают у пользователя, что открыть в дополнительном окне.
Пункты меню Каталог открывают разные вкладки. Чтобы написать логику добавления вкладки тогда нужен параметр команды
Кликните здесь для просмотра всего текста
Изменения в TabHostViewModelBase
0
|
||||||||||||||||
|
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
|
| 04.05.2019, 05:18 [ТС] | |
|
Как сформировать нужный экземпляр AddTabCommandParametr
при нажатии опции меню свойство Catalog при нажатии "Открыть" свойства с номерами.
0
|
|
|
|
||||||||||||||||
| 05.05.2019, 03:38 | ||||||||||||||||
|
Почитайте статью, если не совсем понятно, что к чему в
MVVM, но там переведены термины Model, View, View model и может тяжело читаться, но статья неплохая: Приложения WPF с шаблоном проектирования модель-представление-модель представленияКоротко ответить не получится. Чтобы работало, так как вы хотели, пришлось посидеть нехило так кода написать и много мелочей изменить. Все изменения можно получить из репозитория. Здесь выложу лишь малую часть. Изменений очень много. Потратил несколько часов (примерно 3). Открывается окно, вводим параметры, закрывается окно, появляется вкладка и в фоне "грузит данные из БД" ( Task.Delay). Когда данные загружены, название вкладки меняется и она становится доступна для манипуляций (IsEnabled).Неполная разметка, удалил всё лишнее, чтобы показать, что изменилось:
![]()
В текущей реализации очень легко заменить общее окно на разные конкретные для каждого типа окна или часть заменить, а часть оставить с общим окном. Кстати, в классе Action Content добавляется по событию Loaded, это я эксперементировал, там проблема была с биндингами. То есть необязательно данные добавлять в самый последний момент.
1
|
||||||||||||||||
|
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
|||||||||||
| 09.05.2019, 04:12 [ТС] | |||||||||||
|
Зачем TabHostViewModelBase стал шаблоном не понятно, он же один в приложении.
Так работает
0
|
|||||||||||
| 09.05.2019, 04:12 | |
|
Помогаю со студенческими работами здесь
20
Передача имени файла при создании дочернего процесса Отрисовка дочернего элемента
Выбор дочернего элемента Stackpanel Добавление дочернего элемента в XML Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|