|
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
|
||||||||||||||||
Dependency Property и Binding MVVM31.01.2022, 15:01. Показов 11662. Ответов 108
Всех приветствую, пытаюсь разобраться с тем как привязать DependencyProperty к значению из ViewModel.
Не стал бы этим заниматся если бы не библиотека Material Desing ![]() Суть в том что у кнопки библиотеки есть поле(не уверен что так называется) ButtonProgressAssist.IsIndicatorVisible, оно требует привязку именно к булевому DependencyProperty и просто прибиндится к значению из Viewmodel не получается. в UserControl на котором есть эта кнопка я создал следующее DependencyProperty.
Но вот как прибиндить значение DependencyProperty к полю из View model? Пытался так:
0
|
||||||||||||||||
| 31.01.2022, 15:01 | |
|
Ответы с готовыми решениями:
108
Data binding by nested property
MVVM, непонятки c binding-ом |
|
Модератор
|
||
| 06.02.2022, 18:12 | ||
Content="{Binding SelectedItem, ElementName=listBox}" привяжите к любому свойству.Я использовал ListBox, чтобы не создавать ещё и VM, поскольку для данного примера это излишне. Он просто играет роль источника значения. В лоике он совершенно не участвует. Вы задайте свой источник. Добавлено через 2 минуты enum тоже здесь только для примера, поскольку вы сказали, что у вас он используется.Используйте вместо него просто строки "0", "1", "2", "3" - всё будет работать точно также.
1
|
||
|
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
|
||
| 13.03.2022, 23:32 [ТС] | ||
|
Если я правильно понял то тогда кнопкой мы триггерим команду которая будет менять свойство в VM к которому мы привязываем ContentPresenter, а тот в свою очередь будет отображать указанный UserControl
0
|
||
|
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
|
|||||||||||||||||
| 14.03.2022, 02:42 [ТС] | |||||||||||||||||
|
Есть главное окно в котором переключаются UC с помощью кнопок, главное окно видит DataContext, а UC нет. Код главного окна (всеми UC заведует ContentControl)
0
|
|||||||||||||||||
|
Модератор
|
||||||||
| 14.03.2022, 11:58 | ||||||||
|
Если правильно понял, то регион страниц у вас представляет вот этот ContentControl:
Но судя по XAML UC d:DataContext ="{Binding MainWindowViewModel, вы ожидаете там что-то иное.Ведь в Окне вы задаете в Контент Окна UI содержание и к нему будет применяться Шаблон Данных. Добавлено через 5 минут И мне не вполне ясно как у вас устроена архитектура данных на уровне View. В Окне у вас Контекст Данных это SettingsViewModel. Регион страниц у вас представляет свойство CurrentPage Контекста Данных Окна. И вы там ожидаете MainWindowViewModel из Локатора. Какая-то дикая каша.... Добавлено через 6 минут По идее, если вы используете страничную навигацию, то Контекстом Данных у вас должен быть Навигатор - которого я вообще не вижу в вашем коде. И когда используется Навигатор, то задавать отдельно Локатор не имеет смысла - это только путает решение. Функционал Локатора надо реализовывать в Навигаторе, по сути Навигатор - это Локатор с расширенным функционалом. Но у вас же явно SettingsViewModel - это не Навигатор. Или вы в нём реализовали свойство CurrentPage и переключение страниц. Если можете дайте ссылку на Гит с этим решением - слишком много неясностей в выложенном вами коде.
0
|
||||||||
|
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
|
|
| 14.03.2022, 13:18 [ТС] | |
|
0
|
|
|
Модератор
|
||
| 14.03.2022, 13:28 | ||
|
Шаблон данных применяется к содержимому (Content) UI элемента. Соответственно, содержимое Шаблона никак не может быть верхним элементом визуального дерева. Но Окно может быть только верхним элементом визуального дерева. Добавлено через 5 минут xr_Sanya, я сделал маленькую фиксацию - синхронизируйтесь
0
|
||
|
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
|
||
| 14.03.2022, 13:30 [ТС] | ||
![]() Как я понимаю это тоже самое что самому задать свойство Content к UI элементу.
0
|
||
|
Модератор
|
|||
| 14.03.2022, 13:56 | |||
|
Прочитайте: Ресурсы приложения и запуск основного окна из Code-Behind App Добавлено через 1 минуту Window должен быть всегда верхним элементом, а Шаблон априори всегда не верхний элемент. Добавлено через 7 минут Фиксацию отправил. Добавлено через 5 минут Задавать СB словарю ресурсов - тоже плохая затея. Оно как бы работает, но не всегда и не всюду В Дизайнере точно будут возникать ошибки и предупреждения. Добавлено через 8 минут xr_Sanya, DataContext у UserConrol'ов нормально переключается. Вы, наверное, просто не его ожидаете.
0
|
|||
|
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
|
|||
| 14.03.2022, 14:12 [ТС] | |||
|
0
|
|||
|
Модератор
|
|||||||
| 14.03.2022, 14:38 | |||||||
|
xr_Sanya, например возьмём OtherSettingsPageUserControl:
И какого-то понимания, что вы там ожидаете в действительности увидеть - нет. Так, например, свойства LaunchOnStartup к которому вы задаёте привязку я не нашёл ни одного типа.Добавлено через 2 минуты Назовите его, допустим, Локализатор, сделайте его производным от Freezable и объявите в нём нужные вам DP-свойства. Добавлено через 4 минуты У вас же локализация происходит один раз при запуске приложения или может динамически меняться во время сеанса работы приложения? Если первое, то сделайте ещё проще - в XAML App записывайте в MergedDictionaries словарь с локализацией по умолчанию. А в OnStartup заменяйте его на нужную вам локализацию. Добавлено через 8 минут xr_Sanya, истоки проблемы, скорее всего, что вы из VM SettingsViewModel захотели сделать UI Навигатор. Но это функция View и перенос её на уровень ниже запутало всю логику.
0
|
|||||||
|
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
|
|||
| 14.03.2022, 14:48 [ТС] | |||
|
У всех UC DataContext должен быть SettingsViewModel, просто не добрался до туда еще. Покачто озабочен SettingsMainPageUserControl, так как он не отображает мониторы если явно ему не указать DataContext Добавлено через 8 минут Я у вас про это спрашивал, сделал как понял ![]() Если вкратце то при клике на кнопку меняется UC, путем команды. Команда меняет свойство CurrentPage которое находится в SettingsViewModel. Это свойство слушает ContentControl который исходя из CurrentPage подставляет нужный UC. TemplateSelector окна с помощью класса Extensions/TemplateSelector соотносит CurrentPage с UC.
0
|
|||
|
Модератор
|
||||||
| 14.03.2022, 15:00 | ||||||
|
xr_Sanya, вот пример UI Навигатора:
0
|
||||||
|
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
|
||
| 14.03.2022, 16:47 [ТС] | ||
|
Вы поменяли в Window.Resources способ переключение между UC, в чем была проблема того? И установили DataContext для каждого UC, вроде же говорили что для UC ненадо устанавливать DataContext?
0
|
||
|
Модератор
|
|||
| 14.03.2022, 17:02 | |||
|
Вы задавили разные представления для РАЗНЫХ типов данных. Я уже не говорю за экземпляр с данными. А вам нужно переключать представления безотносительно безотносительно самих данных. Экземпляры данных у вас по сути константны и не изменяются - это свойства локатора. В том числе даже для одного и того же экземпляра данных вам нужно задавать разные представления. И эти переключения представления никак не связанны в Моделью и следовательно это не должно реализовываться на уровне VM. По "феншую" их следует сделать Синглтоном. Так же в такой реализации не создаётся экземпляр для DataContext, а получается от внешнего локатора - поэтому возможность управления им остаётся. Что бы сделать совсем без Контекста Данных, то его придётся задавать из вне. Если бы он был общий у всех или для каждого типа свой - это было бы просто Но у вас он смешанный - и логика зависимости путанная. Реализовывать её на уровне View как-то тоже не с руки.
0
|
|||
|
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
|
||
| 04.04.2022, 21:35 [ТС] | ||
|
0
|
||
|
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
|
||
| 04.04.2022, 21:45 [ТС] | ||
|
Я пишу про локализацию в рантайме, вариант со словарями под разные языки мне понятен.
0
|
||
| 04.04.2022, 21:45 | |
|
Mvvm binding и DataContext Binding данных со связями MVVM Binding позиции мыши MVVM MVVM, Command, ContextMenu Binding
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|