2010-10-23 17 views
5

Tengo un control con una propiedad public MyClass MyProperty{...} cuyo valor se muestra en la pantalla como un gráfico. Quiero que esta propiedad sea capaz de unirse a cualquier otro MyClass en el programa utilizando la clase Binding (MyProperty sería el parámetro propertyName en thisBinding constructor, y el otro MyClass sería el parámetro dataMember).¿OneWay vinculante en WinForms?

MyClass implementa INotifyPropertyChanged entonces en ese lado todo está bien. Pero sucede que si no implemento un acceso get en MyProperty y trato de vincular algo, obtengo un "No se puede vincular a la propiedad 'MyProperty' en el control de destino. Nombre del parámetro: PropertyName" error.

¿Quiere decir esto que tengo para implementar un descriptor de acceso get aunque sé que nunca tendrá que leer su valor y quiero una OneWay (origen al destino) de unión, e incluso si acabo de regresar null en el get ¿Accesor?

Supongo que la clase Binding usa esto para comparar el nuevo valor con el anterior o para hacer otras cosas internas. No estoy seguro, entonces, si es una buena idea simplemente devolver null, o sería mejor guardar siempre una copia de lo último que se haya asignado con el acceso set y devolverla en el acceso get. Tal vez realmente ni siquiera necesito escribir un acceso get y estoy haciendo algo diferente. Simplemente sucede que obtengo el error solo cuando comento el acceso get y dejo de obtenerlo cuando lo vuelvo a poner.

Editar: En caso de que haya cualquier confusión: Cuando digo MyProperty 's valor se muestra en la pantalla como un gráfico que no quiere decir que tiene un valor que algún otro código lee y mostrar en la pantalla. Nadie lee ningún valor de MyProperty. El acceso de MyPropertyset es el que dibuja cosas en la pantalla y ese es el final del ciclo.

+1

Por favor reformatee esto para usar los párrafos. –

+0

También hay un enlace OneWayToSource. Es difícil saber si resolverá tu problema, porque no puedo leer todo el asunto :) Da algunos clips cortos de código de ejemplo, también. –

+0

En realidad, pensé en los párrafos, pero no estaba seguro de dónde ponerlos. Los pondré en algún lado :). – Juan

Respuesta

6

No estoy 100% seguro de entender lo que quieres decir, pero creo que la excepción que está encontrando deriva de CheckBinding función de la clase Binding (reflectored):

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

Por lo tanto, el cambio de la de Encuadernación ControlUpdateMode a ControlUpdateMode.Never puede ser lo que está buscando

+0

Oh ... eso tiene sentido. – Juan