visual varios texto solo para lectura hacer escritura escribir deshabilitar desactivar dejar cuadro como codigo caja bloquear c# wpf xaml mvvm actualwidth

texto - deshabilitar varios textbox c#



¿Cómo vincular una propiedad de control WPF de solo lectura(por ejemplo, ActualWidth) para que su valor sea accesible en el modelo de vista? (3)

Esta pregunta ya tiene una respuesta aquí:

Deseo vincular una propiedad de solo lectura de un control a mi modelo de vista para que el valor esté disponible en el modelo de vista.

Cual es la mejor manera de hacer esto?

Por ejemplo, me gustaría vincular ActualWidth a una propiedad en mi modelo de vista. El valor de ancho lo genera WPF usando su lógica de diseño, por lo que no puedo generar este valor en mi modelo de vista y llevarlo a la propiedad de control, como sería normalmente el caso. En cambio, necesito que WPF genere el valor y lo aplique al modelo de vista.

Solo usaría Mode=OneWayToSource , pero esto no funciona para las propiedades de solo lectura:

<Border ... ActualWidth="{Binding MyDataModelWidth, Mode=OneWayToSource}" > ... child controls ... </Border>

La forma en que lo estoy haciendo actualmente es manejar SizeChanged para el borde y el código subyacente conecta el valor en el modelo de vista, pero esto no se siente del todo bien.

¿Alguien ya ha resuelto este problema?

ACTUALIZACIÓN: Mi pregunta es efectivamente un duplicado de esta: Empujando las propiedades de la GUI de solo lectura a ViewModel


¿realmente necesitas un enlace para eso?

class MyVM { FrameworkElement _context; public MyVM(FrameworkElement context) { _context = context; } public double Width { get { return _context.ActualWidth; } } }


El problema real de por qué esto no funciona se describe here .

Sin embargo, la solución dada para crear un colocador de lanzamiento para pasar la validación no funcionaría en su caso.

Creo que está bien llamar a un método en ViewModel. Si ese es el código detrás de la parte que te molesta, quizás puedas usar la interactividad para llamar a un método basado en un activador de evento (SizeChanged).