visual tutorial studio propiedades introduccion espaƱol desventajas comentar codigo application aplicacion c# wpf events dependency-properties

c# - tutorial - wpf introduccion



Establecer propiedad de dependencia WPF sin desencadenar eventos (3)

Aquí hay una solución alternativa / pirateo. Agregue un valor booleano para realizar un seguimiento de si cambió la configuración, digamos "IsChangedByMe". Cuando cambia la propiedad de dependencia en el código, establezca bool en verdadero. En el evento ValueChanged, si IsChangedByMe es verdadero, no haga nada.

Necesito establecer una propiedad de dependencia en un control (Valor .Disco.del) en mi código sin que desencadene un evento ValueChanged (ya que establecí el valor, no el usuario). ¿Cuál es la mejor manera de manejar esta situación en WPF?

Para aclarar, lo que intento hacer es conectar los controles deslizantes de WPF a un control de usuario de WinForms. Actualmente, en mi aplicación, tengo un controlador de eventos ValueChanged que pasa el valor del control deslizante al control de WinForms a través de una llamada a un método. El control WinForms (que en realidad es un contenedor alrededor de una ventana nativa de OpenGL) necesita poder cambiar dinámicamente el control deslizante en función de sus cálculos internos. Para hacer esto, utilizo una abstracción de un control deslizante (ISlider), instanciando un WPF-sabor de ese control deslizante en mi aplicación, y paso un manejador a su base para el control WinForms a través de una propiedad .NET en el Control de usuario de WinForms. Todo esto está funcionando actualmente, es solo que cuando la lógica interna decide que el control deslizante necesita cambiar, llama a ISlider :: SetPos (), que luego cambia el control deslizante de WPF, que luego desencadena un evento ValueChanged en el control deslizante, y el controlador para ese evento extrae la posición del control deslizante y lo pasa al control WinForms que originó el evento en primer lugar. Las sugerencias de ligaz y Alan Le parecen que deberían funcionar, pero no estoy seguro de estar haciendo esto de la mejor manera.


Una posible solución es derivar de Slider y anular OnValueChanged (...) . Cuando no desea plantear el evento, no debe hacer nada, de lo contrario debe llamar a la implementación base.


¿Estás seguro de que realmente quieres hacer eso? Si hay una pieza de UI ligada a datos a esa propiedad y permite cambiar el valor sin activar el evento ValueChanged que terminaría rápidamente con su UI, ya no se sincronizará con los datos.

En el caso de su deslizador, imagine que el usuario lo coloca al 75%. Ahora su código lo cambia al 10% en segundo plano pero suprime la notificación de cambio. Todavía se ve en la pantalla como si estuviera al 75% (ya que no se le dijo que había cambiado), pero está siendo utilizado como un 10% por el código que se está ejecutando. Suena como una receta para la confusión.