|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
[WPF] Привязка свойств контролов к значениям локальных переменных16.12.2016, 20:00. Показов 5724. Ответов 15
Метки нет (Все метки)
Имеется List, в котором, допустим, по индексу 0 содержится булевое значение, определяющее должен ли быть checkbox ischecked (true) или наоборот.
Мне нужно в xaml разметке сделать привязку к этому листу и указать обращение к первому элементу. То что я имею ввиду: IsChecked="{Binding local:App.AnyList[0]}". Поскольку с binding'ом к локальным переменным не знаком, задаю банальный вопрос: это двусторонняя связь? При изменении ischecked меняется ли значение, к которому оно привязано? В гугле ответа не нашёл конкретно про листы.
0
|
|
| 16.12.2016, 20:00 | |
|
Ответы с готовыми решениями:
15
Рассмотреть программу, написать имена глобальных переменных, локальных переменных, формальных параметров Создание свойств у контролов Изменение свойств вложенных контролов |
|
|
||||||
| 16.12.2016, 23:43 | ||||||
|
dm stark, почему элементы должны храниться в List ?
Можно вот так схитрить:
0
|
||||||
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 17.12.2016, 08:57 [ТС] | |
|
Да нет. Не совсем в привязке дело. Мне нужно это для хранения настроек. Чтобы можно было из List KeyValuePairs доставать по Key (string) конеретные значения (bool в данном случае). Это не только для checkbox'ов. Пока с ними надо разобраться)
List использую, потому что Dictionary не сериализуем XmlSerializer. Как-то же я должен настройки сохранить... Да и связь должна быть двусторонней: меняешь checkbox - меняется значение.
0
|
|
|
|
|||
| 17.12.2016, 13:44 | |||
|
Кроме того можно написать свой механизм для чтения/записи в xml. Читать тут. Я бы примерно так и поступил: 1. Создал view model для настроек. 2. Создал свойство для привязки каждой настройки. 3. При старте приложения загружал сохраненные настройки. 4. При изменении настроек переписывал данные в файле. MVVM подход тем и хорош, что ты берешь данные (model) делаешь для них обертку, удобную для работы (view model) и отображаешь данные как нужно в view. Если List используется ради самого List, то это не самое лучшее решение. Тем более, что для его использования нужно городить костыли.
0
|
|||
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 17.12.2016, 14:21 [ТС] | |
|
Да. Бинарная сериализация получше будет)
Но зачем для каждой настройки свойство делать? Я видел как то можно через свой класс наследуемый от Binding. Там в Source просто Dictionary даётся с настройками. А далее используеься этот класс в привязке. Как это можно сделать? Как такой класс написать? Он не большой.
0
|
|
|
|
|
| 17.12.2016, 16:07 | |
|
Если у тебя для каждой настройки будет отдельный UI элемент, то наиболее логично сделать отдельное свойство и не искать тяжелых путей.
Если все настройки будут в одном элементе типа ListView (я использую GridControl от devexpress, но он платный). Тогда тебе нужна ViewModel отвечающая за отдельную настройку (например с свойствами Name, Value и т.д.). Эти VM будут храниться в ObservableCollection, которую нужно привязать к свойству ItemSource. Если нужны разные типы контролов для настроек то можно использовать ItemTemplateSelector. Таким образом ты получишь коллекцию с настройками, но ни List ни Dictionary не являются кандидатами на эту роль.
0
|
|
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 17.12.2016, 18:41 [ТС] | |
|
Не. У меня настройки для всего приложения. Там несколько страниц. Никакого одного ListView нет. Всё в Grid по обычному)
Вот статья, но что-то не получается. Объясните, пожалуйста, в чём проблема: http://www.broculos.net/2014/0... FP2YhuLSM_ Добавлено через 3 минуты А где про свойства: у меня есть класс ApplicationSettings, где в Dictionary хранятся все настройки; я должен просто сделать свойства в каком-нибудь статическом классе, где извлекаю из Dictionary нужные значения в get property и изменяю в аксессоре set. Так я понимаю? Но у меня там свойств под сотню будет... Добавлено через 30 минут Думаю более правильно найти тяжёлый, но требующий много кода способ, чем описывать всё свойства. Многовато выйдет. Добавлено через 1 час 23 минуты *не требующий много кода способ
0
|
|
|
|
|||||||||||||||||||
| 17.12.2016, 19:04 | |||||||||||||||||||
|
Я с его помощью генерирую базовый набросок view model с model (тип и имя свойства модели извлекаю через рефлексию).
Правда мне не понятно как обновляются привязки при изменении источника (настройки), так как класс не реализует INotifyPropertyChanged. Я предлагал следующее решение:
Я использую вот такой подход.
1
|
|||||||||||||||||||
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
||||||
| 17.12.2016, 21:36 [ТС] | ||||||
|
Лучше синглтон. В моём классе настроек это уже реализовано. Сейчас переделаю как вы написали.
Добавлено через 21 минуту Спасибо Добавлено через 1 час 9 минут Поясните пожалуйста следующее: я вот заменю ItemSource в своём случае на Settings. да и зачем мне реализовывать INotifyPropertyChanged? чтобы при изменении сразу в файл вносить данные. Но вы представляете когда куча настроек, какая это будет нагрузка? Каждый раз всю коллекцию сериализовать бинарно, зашифровать, записать. я просто ещё шифрую настройки. мне не нужна реализация этого интерфейса. я лучше в background потоке буду каждые 5 минут это делать и при событии app.exit. мне менять collection на dictionary? а для checkbox'ов тогда как вот это сделать? установить в datacontext="local:classname" ischecked="{Binding *как то извлечь из dictionary keyvalue по строковому key*}"??? Вот и вернулись к исходному вопросу. Добавлено через 38 минут ладно. просто можете написать свой пример как было только для checkbox. без какого-либо listview. вот вся разметка для вас:
0
|
||||||
|
|
|||
| 17.12.2016, 22:16 | |||
|
Настройки можно сохранять при закрытии view с настройками или через определенное время в фоне.
0
|
|||
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 17.12.2016, 22:17 [ТС] | |
|
А.. Понял с propchenged.
Ну. свой пример использования класса AppSettingsViewModel для задания свойства ischecked checkbox'а. без всяких listview.
0
|
|
|
|
|
| 17.12.2016, 22:42 | |
|
Ага, т.е. что бы без коллекции настроек. Тогда был бы класс с свойством для каждой настройки. DataContext устанавливал бы элементу верхнего уровня, который содержит grid с контролами. Делал бы это с застраничного кода, так как бы ресолвил его через ServiceLocator. По идее если AppSettingsViewModel будет синглтоном, то можна оставить вариант с установкой DataContext в XAML.
0
|
|
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 17.12.2016, 22:59 [ТС] | |
|
Выходит, невозможно связать свойство контрола со значением dictionary?
Добавлено через 24 секунды Ну как то же это делают по ссылке я вам дал. Добавлено через 14 минут а.. ну там вообщем тоже свойства. мда. жаль что со свойствами тыкаться приходится))
0
|
|
|
|
|
| 18.12.2016, 01:25 | |
|
Видимо такая модель была выбрана при создании WPF. Если мы хотим что то использовать как источник данных, то нужен способ отслеживать изменения этих данных. Свойство просто оказалось удобной абстракцией.
0
|
|
|
40 / 32 / 7
Регистрация: 24.03.2016
Сообщений: 270
|
|||||||||||||||||||||||||||
| 25.12.2016, 04:45 | |||||||||||||||||||||||||||
Я пролистал вниз и увидел только что-то про "нельзя бинд делать на словарь", вот вам, используйте, и привязывайтесь Добавлено через 1 минуту
Добавлено через 38 секунд
Добавлено через 51 секунду А тот самый SelectedBoss, это Интовое свойство, что реализует так же OnPropertyChanged Добавлено через 1 минуту dm stark, а вообще у меня настройки сохраняются просто в текстовый файл, а не бинарно сериализуются, что б я смог их изменить вне приложения, как конфиг, знаете?) И там тоже есть значения булевые для тоглбаттонов Добавлено через 58 секунд
Добавлено через 53 секунды Затем чтение при запуске :
2
|
|||||||||||||||||||||||||||
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|||||||||||
| 25.12.2016, 13:54 [ТС] | |||||||||||
|
Сами писали ObservableDictionary?)
Чтение настроек мне не подходит. Они шифруются. Это не портативная программа, а приложение для широкого пользования (будет как бы =). Поэтому использую бинарную сериализацию. А так, я уже решил данную проблему. У меня класс ApplicationSettings со статическим свойством Settings. Есть свои методы Add (по сути, как Add так и Set), Remove, Get из Settings. В конструкторе дешифрую и десериализую, а так же запускаю background поток для сохранения настроек по таймеру и при app.exit. Мне нет резона каждый раз ловить уведомление о том, что коллекция была изменена. Это какая нагрузка выйдет. Каждый раз шифровать, сериализовать и перезаписывать... А настроек у меня в приложений не мало. Так использую в разметке:
0
|
|||||||||||
| 25.12.2016, 13:54 | |
|
Помогаю со студенческими работами здесь
16
Перебор контролов с изменением свойств Привязка контролов к настройкам Привязка контролов к окну
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|