Привязка типа twoway или onewaytosource не может работать с доступным только для чтения свойством

Режимы привязки

Одной из ценных особенностей привязки данных является то, что цель обновляется автоматически, независимо от того, как модифицируется источник. В примере из предыдущей статьи источник может быть модифицирован только в одном направлении — через взаимодействие пользователя с ползунком. Однако рассмотрим несколько усложненную версию этого примера, в которой добавляется кнопка, при щелчке на которой изменяется положение ползунка:

Этот код перемещает значение ползунка на 5 единиц, который, в свою очередь, изменяет размер шрифта текста через привязку данных. Это то же самое, как если бы вы двигали ползунок вручную. В этом и заключается основная сила привязки элементов.

Интересно, что существует способ заставить данные перемещаться в обоих направлениях: от источника к цели и от цели к источнику. Трюк заключается в установке свойства Mode объекта Binding. Ниже приведена усовершенствованная двунаправленная привязка, которая позволяет применять значения либо к источнику, либо к цели, и заставит противоположную часть привязки обновлять себя автоматически:

В рассматриваемом примере нет причин применять двунаправленную привязку (которая требует больше накладных расходов), поскольку эту проблему можно решить с помощью кода. Однако рассмотрим вариант этого примера, включающий текстовое поле, в котором пользователь может точно устанавливать размер шрифта. Этому текстовому полю понадобится двунаправленная привязка, чтобы оно могло как применять пользовательские изменения, так и отражать последнее значение размера, когда оно изменяется другим путем.

Читайте также:  Как отремонтировать напольный вентилятор своими руками

При установке свойства Binding.Mode можно использовать одно из пяти значений перечисления System.Windows.Data.BindingMode. Ниже приведен их полный список:

OneWay

Целевое свойство обновляется при изменениях исходного свойства

TwoWay

Целевое свойство обновляется при изменениях исходного свойства, а исходное свойство обновляется при изменении целевого свойства

OneTime

Целевое свойство устанавливается изначально на основе значения исходного свойства. Однако с этого момента изменения игнорируются (если только привязка не устанавливается на совершенно другой объект или не вызывается BindingExpression.UpdateTarget()). Обычно этот режим используется для сокращения накладных расходов, если известно, что целевое свойство не изменится

OneWayToSource

Подобно OneWay, но действует в обратном направлении. Исходное свойство обновляется, когда изменяется целевое свойство (что может показаться несколько странным), но целевое свойство никогда не обновляется

Default

Этот тип привязки зависит от целевого свойства. Это либо TwoWay (для устанавливаемых пользователем свойств, таких как TextBox.Text), либо OneWay (для всего остального). Все привязки используют данный подход, если только не указано иное

На рисунке демонстрируется разница. Вы уже видели OneWay и TwoWay. Значение OneTime достаточно очевидно. Оставшиеся два варианта требуют ряда дополнительных исследований.

Может возникнуть вопрос: зачем нужны две опции — и OneWay, и OneWayToSource? В конце концов, оба значения создают однонаправленную привязку, которая работает одинаковым образом. Единственное отличие в том, куда помещено выражение привязки. По сути, OneWayToSource позволяет поменять местами источник и цель, поместив выражение в то, что обычно считается источником привязки.

Наиболее общая причина использования этого трюка состоит в установке свойства, которое не является свойством зависимости. Как упоминалось, выражения привязки могут применяться только для установки свойств зависимости. Однако с помощью OneWayToSource это ограничение можно обойти, предоставляя в качестве свойства, поставляющего значение, свойство зависимости.

Изначально кажется логичным предположить, что все привязки однонаправленные, если только явно не указано иное. (В конце концов, именно так работает простой пример с ползунком.) Но на самом деле это не так. Чтобы убедиться в этом, вернемся к примеру с привязанным текстовым полем и позволим редактировать текущий размер шрифта. Если убрать установку Mode=TwoWay, этот пример все равно будет работать точно также. Причина в том, что WPF использует разные значения Mode по умолчанию, в зависимости от привязываемого свойства. (Формально в каждом свойстве зависимости присутствует фрагмент метаданных — флаг FrameworkPropertyMetadata.BindsTwoWayByDefault, который указывает, какую привязку должно использовать свойство: однонаправленную или двунаправленную).

Часто значение по умолчанию — именно то, что и нужно. Тем не менее, можно представить пример с текстовым полем только для чтения, которое пользователь не может изменять. В этом случае удается слегка сократить накладные расходы, установив режим однонаправленной привязки.

В качестве общего эмпирического правила: всегда неплохо явно устанавливать режим. Даже в случае текстового поля стоит подчеркнуть, что нужна двунаправленная привязка, включив свойство Mode.

Источник

InvalidOperationException — привязка TwoWay или OneWayToSource не может работать со свойством только для чтения.

Я использую шаблон MVVM и получаю следующее, когда запускаю свое приложение

InvalidOperationException Привязка TwoWay или OneWayToSource не может работать с доступным только для чтения свойством «Options» типа «ViewModel.SynergyViewModel».

Я закомментировал весь исходный код в своей модели представления и отследил это до флажка. Если я закомментирую флажок или правильность моей модели представления, запускаемой приложением, за вычетом функциональности. Ниже я перечислил код для своего флажка и свойства в модели просмотра.

Произошло System.InvalidOperationException Сообщение = Привязка TwoWay или OneWayToSource не может работать с доступным только для чтения свойством «Параметры» типа «ViewModel.MyViewModel». Источник = PresentationFramework StackTrace: в MS.Internal.Data.PropertyPathWorker.CheckReadOnly (элемент объекта, информация об объекте) InnerException:

Любые идеи о том, что мне здесь не хватает?

4 ответа

Либо сделайте свой сеттер общедоступным, либо явно установите Binding.Mode на OneWay .

Ваш сеттер является частным, либо укажите привязку в режиме OneWay, либо удалите частный из сеттера.

В моем совершенно глупом случае я забыл определить сеттер для свойства, сделав его, ну, в общем, доступным только для чтения. Только мои 2 цента для тех, кто работает слишком поздно.

Для тех, кто нашел это, не используя PropertyChanged

Независимо от того, используется ли PropertyChanged , это исключение также генерируется, когда у вас есть вычисляемое свойство (без установщика), и пользователь пытается отредактировать столбец. Тогда достаточно установить для всей DataGrid значение IsReadOnly=»True» или только для столбца ReadOnly.

Источник

Entity Framework: вывод данных из DataGrid-а в TextBox

доброго времени суток

имеется wpf приложение с mdf базой, подход — EntityFramework CodeFirst. данные из базы читаю с помощью Linq запроса и помещаю в DataGrid:

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Добавления и вывод данных в Entity Framework
Не могу нагуглить как мне выводить куда либо(для начала, например в combobox или listbox) данные с.

Entity Framework и сортировка в DataGrid
Добрий день. Для соединения с DataGrid использываю Entity Framework, и передаю в ItemSourse свою.

DataGrid или ListView + Entity Framework
Столкнулся со следующей проблемой (на примере DataGrid, с ListView аналогичная штука). В.

MySql, Entity Framework выводятся данные в DataGrid в неправильно кодировке
Здравствуйте, такая проблема. При загрузке данных из базы данных и отображении в DataGrid весь.

Но если у них общий контейнер (например, Grid или StackPanel), то лучше задавать DataContext один раз — этому контейнеру (я так делаю — работает).

И потом указываете биндинг для текстбоксов:

если я правильно понял, надо так:

Решение

WPF, DataGrid, Entity Framework — отображение и редактирование связанных таблиц
Привет! Использую существующую БД MS SQL. На ее основе создаю модель EF. На форме MainWindow лежит.

В чем разница между Entity Framework и Entity Framework Core?
В чем разница (если она есть) между entity framework и entity framework core?

Обновление данных в Entity Framework
Всем привет, помогите пожалуйста. вот есть такой код testentityEntities creat = new.

Автообновление данных с Entity Framework
В составе C# и MSSQL пишу многопользовательскую программу (по сути простой учёт продукции на.

Entity Framework другие источники данных
Какие базы данных можно использовать в Entity Framework, меня интересует Excel запись и чтение.

Entity framework, связь с Базой данных
Создал с помощью Entity framework контроллер, он выдает ошибку. Проблема я так понял в Базе? или.

Источник

Привязка TwoWay или OneWayToSource не может работать со свойством только для чтения после обновления версии.NET

У меня есть приложение WPF с целевой версией фреймворка как 4.5 , Теперь я перешел на версию 4.6.2 ,

После этого я получаю следующую ошибку в нескольких местах.

я использую Visual Studio 2017 ,

Назовите проект как A и это имеет B, C, D as dependencies , В то время как B, C и D прилагаются as DLL Я получаю ошибку. Если они прикреплены as projects Я не получаю ошибку.

Примечание. Все B, C, D являются проектами версии 4.5, и я не изменяю их на 4.6.2 для запуска этого проекта.

Может кто-нибудь сообщить мне о том, как действовать дальше, и если есть какие-либо ошибки в подходе?

Связанный вопрос отличается от моего случая:

Следующий вопрос похож.

но ссылка в ответе, кажется, не работает или перенаправлена:

0 ответов

Я знаю, что уже год поздно, но если кто-то столкнется с этим, это известная проблема. После обновления фреймворка части моего пользовательского интерфейса начали выдавать исключение InvalidOperationException. Исправить было несложно, просто добавьте в привязку явный режим Mode=OneWay. Но мне все еще нужно было знать, почему это началось, если в течение некоторого времени никто ничего не менял в коде.

Попытка привязки данных к свойству без общедоступного установщика никогда не поддерживалась. Начиная с.NET Framework 4.5.1, этот сценарий вызывает исключение InvalidOperationException. Обратите внимание, что это новое исключение будет выдано только для приложений, специально предназначенных для.NET Framework 4.5.1. Если приложение нацелено на.NET Framework 4.5, вызов будет разрешен. Если приложение не нацелено на конкретную версию.NET Framework, привязка будет рассматриваться как односторонняя.

Проблема была всегда, она только начинала генерировать исключение, когда это происходит.

Источник

InvalidOperationException — привязка TwoWay или OneWayToSource не может работать со свойством только для чтения

Я использую шаблон MVVM и получаю следующее при запуске своего приложения

InvalidOperationException Привязка TwoWay или OneWayToSource не может работать со свойством ‘Options’ типа ‘ViewModel.SynergyViewModel’, доступным только для чтения.

Я прокомментировал весь свой источник в своей модели представления и проследил это до флажка. Если я закомментирую checkbox или правильность в моей модели представления, приложение запустится, минус функциональность. Ниже я перечислил код для моего checkbox и свойство в viewmodel.

System.InvalidOperationException произошло Message=a TwoWay или OneWayToSource привязка не может работать только для чтения свойства ‘Options’ типа ‘ViewModel.MyViewModel’. Источник=PresentationFramework StackTrace: на MS.Internal.Data.PropertyPathWorker.CheckReadOnly(элемент, объект, объект, информация) InnerException:

Есть какие-нибудь идеи о том, что я такое, чего мне здесь не хватает?

3 ответа

У меня есть список кортежей, соединяющих два фрагмента данных. Я хотел бы привязать список к сетке данных. Для отображения он работает нормально. но если я попытаюсь изменить запись, она скажет: привязка TwoWay или OneWayToSource не может работать со свойством только для чтения ‘Item1’.

После обновления проекта, написанного в VS2012 с .NET 4.5 на VS2013 .NET 4.5.1, привязка к моим флажкам вызывает исключение invalidoperation: привязка TwoWay или OneWayToSource не может работать со свойством только для чтения

Либо сделайте свой setter общедоступным, либо явно установите Binding.Mode в OneWay .

Ваш setter является частным, либо укажите привязку к режиму OneWay, либо удалите частное из setter

В моем абсолютно глупом случае я забыл определить setter для свойства, сделав его, ну, доступным только для чтения. Только мои 2 цента для тех, кто работает слишком поздно.

Похожие вопросы:

Эта привязка Дает эту ошибку Привязка TwoWay или OneWayToSource не может работать со свойством только.

У меня есть свойство только для чтения, которое мне нужно отобразить в textbox, и я получаю эту ошибку во время выполнения. Я поставил IsEnabled=False , IsReadOnly=True — не повезло. Другие поиски.

Я использую textName для ввода имени пользователя. Затем, набрав текст, событие textchanged обновляет listbox с именами, которые совпадают с вводом, затем пользователь может нажать на элемент.

У меня есть список кортежей, соединяющих два фрагмента данных. Я хотел бы привязать список к сетке данных. Для отображения он работает нормально. но если я попытаюсь изменить запись, она скажет.

После обновления проекта, написанного в VS2012 с .NET 4.5 на VS2013 .NET 4.5.1, привязка к моим флажкам вызывает исключение invalidoperation: привязка TwoWay или OneWayToSource не может работать со.

У меня есть пользовательский элемент управления со свойством зависимости, определяемым следующим образом: public class TemplatedTextBox : TextBox < public static readonly DependencyProperty.

Источник

Оцените статью