Tengo una aplicación WPF donde he tratado de implementar el patrón MVVM y Prism 2. Tengo un Usercontrol que se ha suscrito a un evento disparado desde otro Usercontrol. Me gustaría alternar la visibilidad de algunos elementos secundarios en el control de suscripción. Los eventos se disparan correctamente, incluso puedo vincular datos con éxito a algunos elementos. ¿Cómo puedo vincular Visibility o cualquier propiedad de estilo con ViewModel y cambiarlos dinámicamente?Cómo cambiar la visibilidad de un control WPF desde ViewModel
Respuesta
Puede tener una propiedad booleana en su ViewModel y vincular esa propiedad a la propiedad Visibilidad de sus controles. Debido a que estará asigning un valor booleano y la propiedad de visibilidad espera un valor de visibilidad enumeración, tendrá que utilizar el convertidor BooleanToVisibilityConverter para hacer la conversión,
<Style.Resources>
<BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" />
</Style.Resources>
<Image Visibility="{Binding Path=ShowImage,
Converter={StaticResource booleanToVisibilityConverter}}"/>
Espero que esto ayude.
Ezequiel Jadib
Aunque la adición de una propiedad booleana y el uso de un convertidor de valores obras, recomendaría la adición de una propiedad de tipo visibilidad a este modelo de vista, por ejemplo,
public Visibility ImageVisibility
{
get { return shouldShowImage ? Visibility.Visible : Visibility.Collapsed }
}
La ventaja de este método es que no es necesario escribir un convertidor para cada propiedad que desea expresarse de una manera visual (por ejemplo, para un nivel de stock que convierte una etiqueta roja cuando cae por debajo de 10, podría tener un convertidor que use una vez o simplemente exponer una propiedad StockLabelBrush desde su VM)
Si bien esta respuesta es elegante, hay un problema con ella. Si el programa cambia 'shouldShowImage', ese cambio no se envía a la vista. – James
Eso es cierto, pero hay un par de maneras de manejar el problema. Puede manejar el evento 'PropertyChanged' desde' shouldShowImage' y generar un nuevo evento 'PropertyChanged', o solo permitir el acceso a' shouldShowImage' a través de una propiedad de contenedor que genera eventos para ambas propiedades. – Darren
Sé que esta es una pregunta antigua, pero hay una solución simple para las personas que se encuentran con este problema y encuentran esta respuesta.
En su modelo de vista, cree una propiedad "Visibilidad" de esta manera:
public Visibility ShowModifyButtons
{
get { return (Visibility)GetValue(ShowModifyButtonsProperty); }
set { SetValue(ShowModifyButtonsProperty, value); }
}
public static readonly DependencyProperty ShowModifyButtonsProperty =
DependencyProperty.Register("ShowModifyButtons", typeof(Visibility), typeof(FileMatchViewModel),
new UIPropertyMetadata(Visibility.Collapsed));
En el XAML, se unen a ella de este modo:
<Button Focusable="False" Content="Save" Width="100" Margin="10" Visibility="{Binding ShowModifyButtons}"/>
Ahora, a partir de su modelo de vista, puede establecer ShowModifyButtons
en Visibility.Collapsed
o Visibility.Visible
según sea necesario.
- 1. ¿Cómo determino la visibilidad de un control?
- 2. Silverlight 4: cómo cambiar la visibilidad del control
- 3. WPF (MVVM): ¿Cerrar una vista desde Viewmodel?
- 4. WPF - Vincular visibilidad de control de usuario a una propiedad
- 5. Visibilidad del panel de alternar WPF
- 6. agregando visibilidad condicional al control WPF Información sobre herramientas
- 7. WPF Tooltip Visibilidad
- 8. Desde WPF Control a Silverlight Control
- 9. ¿Cómo crear un control rápido de WPF Datagrid desde cero?
- 10. Desvanecimiento WPF en un control
- 11. WPF invocar un control
- 12. Knockout.js ViewModel cambiar la devolución de llamada?
- 13. WPF: cómo señalar un evento desde ViewModel a View sin código en codebehind?
- 14. WPF ¿Animación de activación cuando se cambia la visibilidad?
- 15. Forzar un control WPF personalizado para cambiar el tamaño correctamente
- 16. cómo implementar observable int en wpf ViewModel?
- 17. Prism2/MVVM Cerrar Vista desde ViewModel
- 18. Controlar la visibilidad de vista desde un recurso
- 19. WPF: ¿cómo puedo predeterminar la visibilidad de un Textblock de datos?
- 20. Cómo activar o desactivar una visibilidad de columna WPF Grid
- 21. Acceso a las propiedades de ViewModel desde un subproceso diferente
- 22. Cambio de la visibilidad en un StackPanel
- 23. Copie un control WPF programáticamente
- 24. Animación de visibilidad de panel de WPF
- 25. WPF TabControl - Seleccione una pestaña diferente cuando la visibilidad de TabItem cambie
- 26. Generando propiedades de ViewModel en wpf?
- 27. Comandos de WPF ViewModel CanExecute problema
- 28. Cambiar la visibilidad de la etiqueta ASP.NET con JavaScript
- 29. (Wicket) Cambiar la visibilidad durante la respuesta de ajax
- 30. WPF Custom Control - ¿Cómo prueba un control personalizado?
De alguna manera esto no funcionó para mí. Decidí convertidor en Usercontrol.Resources sección y enlaces utilizados como ha explicado en el comentario. – Raj
Disculpe mi error. Esto funciona. Gracias. – Raj