2011-09-03 17 views
5

Tengo una clase que contiene una DependencyProperty de solo lectura. Desde esta clase, quiero enlazar al readonly DependencyProperty con otro readonly DepenendencyProperty de otra clase (crear enlace desde el código).Enlazar una DependencyProperty de solo lectura a otra propiedad DependencyProperty

¿Existe la posibilidad de hacer esto? SetBinding() parece no tener una sobrecarga que toma un DependencyPropertyKey como parámetro? Tampoco parece que la clase BindingOperations proporcione dicha funcionalidad.

La pregunta también se puede formular: ¿Puedo crear un enlace para readonly DependencyProperty si tengo el DependencyPropertyKey?

+0

¿Cómo se supone que funciona? Si ambos lados son de solo lectura, ni siquiera OneWay debería funcionar en ningún caso, ¿no? –

+1

@ H.B. No, dado que tengo la clave de solo lectura DependencyProperty (DependencyPropertyKey), desde la perspectiva de mi clase no es de solo lectura. Solo para el exterior de la clase. Algo así como el establecimiento privado de una propiedad CLR: es accesible desde el interior de la clase, pero para otras clases es una propiedad de solo lectura. http://msdn.microsoft.com/en-us/library/system.windows.dependencypropertykey.aspx – HCL

+0

Veo; de alguna manera dudo que se pueda hacer, puedes registrar fácilmente una devolución de llamada con propiedad cambiada y establecer el valor manualmente. –

Respuesta

2

Esto no es posible porque el método FrameworkElement.SetBinding solo acepta un DependencyProperty como su primer parámetro. Hubiera sido genial si también aceptara un DependencyPropertyKey en su lugar. Debido a que la clave no es visible fuera de la clase, todavía sería de solo lectura fuera de la clase, pero desde dentro de la clase podría usarla para un enlace. Lamentablemente, esto no es posible.

0

¿Alguna buena sugerencia sobre cómo implementar esto?

Se podría tratar de implementar una propiedad de dependencia de RW privada, vincular la RO original con ella y, en la devolución de llamada de RW, modificar la RO de exposición. Pero esto suena como un truco. ¿Alguna mejor opción?

Cuestiones relacionadas