wpf - MVVM: ocultando un control cuando la propiedad vinculada no está presente
xaml binding (1)
Me preguntaba si es posible ocultar un control en una vista si la propiedad a la que está vinculado el control no existe en el modelo de vista. Por ejemplo, si tengo lo siguiente:
<CheckBox Content="Quote"
IsChecked="{Binding Path=IsQuoted}" />
¿Puedo detectar en XAML que la propiedad IsQuoted no existe en el modelo de vista y simplemente ocultar el control en esa instancia?
Básicamente, estoy creando un diálogo de asistente que se mueve a través de una colección de modelos de vista, mostrando la vista asociada para cada uno. Para algunos de los modelos de vista en la colección, la propiedad "IsQuoted" estará presente, y para algunos no.
Me gustaría tener una casilla de verificación fuera de estas vistas que se muestra cuando el modelo de vista actual tiene la propiedad y se oculta cuando el modelo de vista no. Todos los modelos de vista se derivan de una clase base común, pero preferiría no saturar la base agregando una propiedad "Mostrar cita", etc.
¿Pensamientos? Y, gracias de antemano ...
Maneje el caso donde está presente el valor usando un convertidor que siempre devuelve Visibilidad.Visible. Maneje el caso donde el valor no está presente especificando un valor de retorno. Cuando la propiedad no está presente, el enlace falla y recibe el valor de retorno.
<Page.DataContext>
<Samples:OptionalPropertyViewModel/>
</Page.DataContext>
<Grid>
<Grid.Resources>
<Samples:AlwaysVisibleConverter x:Key="AlwaysVisibleConverter" />
</Grid.Resources>
<CheckBox
Content="Is quoted"
IsChecked="{Binding IsQuoted}"
Visibility="{Binding IsQuoted,
Converter={StaticResource AlwaysVisibleConverter},
FallbackValue=Collapsed}"
/>
</Grid>
public class OptionalPropertyViewModel
{
public bool IsQuoted { get; set; }
}
public class AlwaysVisibleConverter : IValueConverter
{
#region Implementation of IValueConverter
public object Convert(object value,
Type targetType, object parameter, CultureInfo culture)
{
return Visibility.Visible;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}