Односторонняя привязка на WinForms? - PullRequest
5 голосов
/ 23 октября 2010

У меня есть элемент управления со свойством public MyClass MyProperty{...}, значение которого отображается на экране в виде графика.Я хочу, чтобы это свойство можно было привязать к любому другому MyClass в программе с помощью класса Binding (MyProperty будет параметром propertyName в этом конструкторе Binding, а другойMyClass будет параметром dataMember).

MyClass реализует INotifyPropertyChanged, поэтому с этой стороны все в порядке.Но бывает, что если я не реализую аксессор get в MyProperty и пытаюсь что-то с ним связать, я получаю "Невозможно связать со свойством" MyProperty "в целевом элементе управления. Имя параметра:PropertyName " ошибка.

Означает ли это, что у меня есть для реализации средства доступа get, даже если я знаю, что мне никогда не понадобится читать его значение, и я хочу привязку OneWay (от источника к цели) и дажеесли я просто верну null в аксессор get?

Я предполагаю, что класс Binding использует это для сравнения нового значения со старым или для выполнения каких-то других внутренних операций.Я не уверен, что если будет хорошей идеей просто вернуть null, или было бы лучше всегда сохранять копию того последнего объекта, которому был присвоен метод доступа set, и возвращать его в getсбруя.Возможно, мне даже не нужно писать аксессор get, и я делаю что-то еще неправильно.Случается, что я получаю сообщение об ошибке только тогда, когда закомментирую аксессор get и перестаю получать его, когда кладу обратно.

Редактировать: В случае возникновения путаницы: КогдаЯ говорю, что значение MyProperty отображается на экране в виде графика. Я не имею в виду, что оно имеет значение, которое какой-то другой код читает и показывает на экране.Никто не читает значения из MyProperty.Аксессуар MyProperty set - это тот, который рисует вещи на экране, и это конец цикла.

1 Ответ

6 голосов
/ 24 октября 2010

Я не уверен на 100%, что понимаю, что вы имеете в виду, но я думаю, что исключение, с которым вы столкнулись, связано с функцией CheckBinding класса Binding (отраженной):

if (descriptor.IsReadOnly && (this.controlUpdateMode != ControlUpdateMode.Never))
{
    throw new ArgumentException(SR.GetString("ListBindingBindPropertyReadOnly", new object[] { this.propertyName }), "PropertyName");
}

Поэтому, изменение Binding's ControlUpdateMode на ControlUpdateMode.Never может быть тем, что вы ищете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...