que property español data context wpf silverlight binding

property - wpf binding types



Unión de Visibilidad de otro elemento-e inversión (3)

En este caso, podrías hacerlo con disparadores. Ejemplo con dos botones

<Button Name="button1"> <Button.Style> <Style> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=button2, Path=Visibility}" Value="Visible"> <Setter Property="Button.Visibility" Value="Hidden"/> </DataTrigger> </Style.Triggers> </Style> </Button.Style> </Button> <Button Name="button2"/>

Me gustaría que el Control A sea visible si el Control B está oculto, y viceversa. En este momento tengo este convertidor:

public class InvertVisibilityConverter : IValueConverter { public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture) { if (targetType == typeof(Visibility)) { Visibility vis = (Visibility)value; return vis == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed; } throw new InvalidOperationException("Converter can only convert to value of type Visibility."); } public Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture) { throw new Exception("Invalid call - one way only"); } }

Y este XAML:

<Button Visibility="{Binding ElementName=btn1, Path=Visibility, Converter={StaticResource InvertVisibilityConverter}}">Btn2</Button>

Que funciona Me pregunto si hay una forma más directa en WPF / Silverlight para lograr esto. No me importa tener un convertidor, solo quiero asegurarme de que no haya una mejor manera de la que no tenga conocimiento.


En pocas palabras, no veo ningún problema con lo que estás haciendo.

Dicho esto, si tiene una propiedad en ViewModel a la que se vincula el Control A para controlar su visibilidad, vincularía el Control B a la misma propiedad e invertiría la visibilidad a través de un convertidor separado. No estoy seguro si puedo expresar por qué, pero eso me parece más natural (al menos en lugar de cualquier contexto adicional sobre lo que estás haciendo).


Lo que estás haciendo está bien, pero tiendo a preferir los convertidores más generales y mantener la simetría con los conversores integrados.

Entonces, haría un InverseBooleanToVisibiltyConverter que acepta booleanos y devuelve tipos de visibilidad. Esto coincide con el construido en BoolenToVisibiltyConverter

Luego, enlazaría a la propiedad IsVisible del botón, no a la propiedad Visibilidad.

Pero esa es una cuestión de preferencia en realidad.