Estoy tratando de aprender a usar el enlace WPF y la arquitectura MVVM. Me estoy metiendo en problemas con Dependency Properties. Intenté controlar la visibilidad de un elemento en la vista vinculándolo a DependencyProperty en DataContext, pero no funciona. No importa a qué establezca el valor GridVisible
en el constructor del modelo de vista a continuación, siempre se muestra como visible cuando ejecuto el código.WPF Arquitectura de enlace de datos Pregunta
¿Alguien puede ver dónde me está yendo mal?
código C# (ViewModel):
public class MyViewModel : DependencyObject
{
public MyViewModel()
{
GridVisible = false;
}
public static readonly DependencyProperty GridVisibleProperty =
DependencyProperty.Register(
"GridVisible",
typeof(bool),
typeof(MyViewModel),
new PropertyMetadata(false,
new PropertyChangedCallback(GridVisibleChangedCallback)));
public bool GridVisible
{
get { return (bool)GetValue(GridVisibleProperty); }
set { SetValue(GridVisibleProperty, value); }
}
protected static void GridVisibleChangedCallback(
DependencyObject source,
DependencyPropertyChangedEventArgs e)
{
// Do other stuff in response to the data change.
}
}
código XAML (Ver):
<UserControl ... >
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisConverter" />
</UserControl.Resources>
<UserControl.DataContext>
<local:MyViewModel x:Name="myViewModel" />
</UserControl.DataContext>
<Grid x:Name="_myGrid"
Visibility="{Binding Path=GridVisible,
ElementName=myViewModel,
Converter={StaticResource BoolToVisConverter}}">
<!-- Other elements in here -->
</Grid>
</UserControl>
He mirado en varios tutoriales en línea, y parece como si estuviera siguiendo correctamente lo que he encontrado allí. ¿Algunas ideas? ¡Gracias!
Realmente copié el código y encontré que funcionaba con el enlace con y sin ElementName incluido. ¿Con qué estás usando el control de usuario (es decir, una ventana u otro control de usuario)? Quizás hay algo mal allí (código que no incluiste). – thornhill
Eliminé ElementName y todavía no funciona. Aunque parece que tienes razón, probablemente tenga algo que ver con otra parte de mi código, y no con la versión esterilizada publicada anteriormente. Desafortunadamente no puedo publicar el código real ya que es por trabajo. – RobotNerd
En ese caso, cuando ejecuta su aplicación y tiene la ventana abierta que contiene este control de usuario, busque en su ventana de resultados en VisualStudio cualquier error con texto similar a este "Error de ruta de BindingExpression: propiedad 'GridVisible' no encontrada en 'object ......' el contenido de ese mensaje puede ayudarlo a depurarlo aún más. lo siento, no puedo ayudarte más. buena suerte. – thornhill