visual oculto ocultar mostrar hacer formulario form como boton c# wpf silverlight binding datacontext

c# - oculto - ¿Cómo ocultar un control si el DataContext subyacente es nulo?



ocultar y mostrar panel c# (6)

Tengo un objeto en mi modelo de vista que tiene un montón de propiedades, algunas de ellas ocasionalmente serán nulas. No quiero mostrar solo algunos controles si estos controles en particular son nulos. ¿Cómo podría ocultar el control si el enlace es nulo? Estaba pensando en algún tipo de convertidor, pero no sé cómo hacerlo exactamente. ¿Algunas ideas?

edit: lo siento, debería mencionar que esto también estará en Silverlight, así que no estoy seguro de si los desencadenadores de estilo funcionarían ...?


En Silverlight puede usar el próximo enfoque: agregue el activador para controlar:

<i:Interaction.Triggers> <core:DataTrigger Binding="{Binding SomeProperty}" Comparison="Equal" Value="{x:Null}"> <core:ChangePropertyAction PropertyName="Visibility" Value="Collapsed" /> </core:DataTrigger> </i:Interaction.Triggers>


Este enfoque es más fácil:

<CheckBox Visibility="{Binding Path=checkedField, TargetNullValue=Collapsed }">

Cuando la propiedad enlazada checkedField es nula, la visibilidad se configurará en Colapsado.


Necesitaba esto, pero no pude hacerlo funcionar dentro de una DataTemplate dentro de una DataGridTemplateColumn, así que aquí está mi ejemplo de cómo lo hice funcionar.

<DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox ItemsSource="{Binding Path=DataContext.AvailableHierarchies, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}} }" DisplayMemberPath="Name" SelectedItem="{Binding Path=DataContext.SelectedHierarchy, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}},UpdateSourceTrigger=PropertyChanged }" > <ComboBox.Style> <Style TargetType="ComboBox" BasedOn="{StaticResource {x:Type ComboBox}}"> <Style.Triggers> <Trigger Property="ComboBox.ItemsSource" Value="{x:Null}"> <Setter Property="Visibility" Value="Collapsed"/> </Trigger> </Style.Triggers> </Style> </ComboBox.Style> </ComboBox> </DataTemplate> </DataGridTemplateColumn.CellTemplate>


Puede usar el evento DataContextChanged , cuando DataContext es nulo, puede establecer Visibility Collapsed

Lea más sobre esto here


También necesitaba esto para una aplicación WindowsPhone WinRT. Terminé usando el convertidor de @ PrinceAshitaka con una pequeña modificación en el enlace como se sugiere en esta respuesta a una pregunta similar

Debería usar FallbackValue=Collapsed para evitar mostrar el control precisamente cuando el contexto de datos es nulo. No estoy seguro de por qué TargetNullValue=Collapsed no funcionó para mí.

Visibility="{Binding Converter={StaticResource NullToVisibilityConverter}, FallbackValue=Collapsed}"


Tener un convertidor como sigue,

public sealed class NullToVisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return value == null ? Visibility.Hidden: Visibility.Visible; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }

Ahora, vincula la propiedad con la propiedad Visibilidad también. Me gusta,

<ListBox ItemsSource="{Binding Path=Squad}" Visibility="{Binding Converter={StaticResource nullToVisibilityConverter}, Path=Squad}"> <ListBox.ItemTemplate> <DataTemplate> <CheckBox Content="{Binding}" /> </DataTemplate> </ListBox.ItemTemplate> </ListBox>