I have a control with a property public MyClass MyProperty{...}
which value is shown on the screen as a graph. I want this property to be bindable to any other MyClass
in the program by using the Binding
class (MyProperty
would be the propertyName
parameter in this Binding
constructor, and the other MyClass
would be the dataMember
parameter) .
MyClass
implements INotifyPropertyChanged
so on that side everything is all right. But it happens that if I don't implement a get
accessor in MyProperty
and try to bind something to it, I get a "Cannot bind to the property 'MyProperty' on the target control.
Parameter name: PropertyName" error.
Does this mean I have to implement a get
accessor even if I know I will never need to read it's value and I want a OneWay (source to target) binding, and even if I just return null
in the get
accessor?
I'm guessing the Binding
class uses this to compare the new value to the old one or to do some other internal stuff. I'm not sure, then, if it's a good idea to just return null
, or it would be better to keep always a copy of whatever last object was assigned with the set
accessor and return it in the get
accessor. Maybe I really don't even need to write a get
accessor and I'm doing something else wrong. It just happens that I get the error only when I comment out the get
accessor and stop getting it when I put it back.
Edit: In case there is any confusion: When I say MyProperty
's value is shown on the screen as a graph I don't mean it has a value that some other code reads and show in the screen. No one reads any value from MyProperty
. MyProperty
's set
accessor is the one that draws stuff on the screen and that's the end of the cycle.
I'm not 100% sure I understand what you mean, but I think the exception you're encountering stems from the Binding
class's CheckBinding
function (reflectored):
if (descriptor.IsReadOnly && (this.controlUpdateMode != ControlUpdateMode.Never))
{
throw new ArgumentException(SR.GetString("ListBindingBindPropertyReadOnly", new object[] { this.propertyName }), "PropertyName");
}
Therefore, changing the Binding's ControlUpdateMode
to ControlUpdateMode.Never
may be what you're looking for
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With