wpf - ¿Cuál es la diferencia entre la propiedad de dependencia SetValue() y SetCurrentValue()
dependency-properties (2)
El enlace de MSDN que proporcionaste lo dice bastante bien:
Este método es utilizado por un componente que establece mediante programación el valor de una de sus propias propiedades sin deshabilitar el uso declarado de la propiedad por parte de una aplicación. El método SetCurrentValue cambia el valor efectivo de la propiedad, pero los activadores, enlaces de datos y estilos existentes continuarán funcionando.
Supongamos que está escribiendo el control TextBox
y ha expuesto una propiedad de Text
que la gente suele usar de la siguiente manera:
<TextBox Text="{Binding SomeProperty}"/>
En el código de su control, si llama a SetValue
, sobrescribirá el enlace con lo que proporcione. Sin embargo, si llama a SetCurrentValue
, se asegurará de que la propiedad tome el valor dado, pero no destruirá ningún enlace.
Que yo sepa, el consejo de Greg es incorrecto. Siempre debe usar GetValue
/ SetValue
de su propiedad de contenedor CLR. SetCurrentValue
es más útil en situaciones en las que necesita una propiedad para adquirir un valor determinado, pero no desea sobrescribir ningún enlace, activador o estilo que se haya configurado en su propiedad.
La razón por la que pregunto esto es porque me recomendó @Greg D (de esta pregunta ) usar SetCurrentValue()
lugar, pero eché un vistazo a los documentos y no ví cuál es la diferencia. ¿O qué significa "sin cambiar su fuente de valor"?
Establece el valor local de una propiedad de dependencia, especificado por su identificador de propiedad de dependencia.
Establece el valor de una propiedad de dependencia sin cambiar su fuente de valor.
Más allá de la respuesta aceptada:
Encontré que este post explica SetCurrentValue () bastante bien. Observe cómo el sistema de precedencia de valor de propiedad de dependencia tomará un valor local sobre un valor límite. Lo que explica el comportamiento inesperado de los comentaristas.