wpf data-binding fallback

WPF Binding FallbackValue establecido en Enlace



data-binding (3)

¿Hay alguna manera de tener otro enlace como valor de reserva?

Estoy tratando de hacer algo como esto:

<Label Content="{Binding SelectedItem.Name, ElementName=groupTreeView, FallbackValue={Binding RootGroup.Name}}" />

Si alguien tiene otro truco para llevarlo a cabo, sería genial.


¿En qué condiciones le gustaría usar el valor de Fallback? ¿Cómo determinarías que un enlace ha fallado? Un enlace sigue siendo válido incluso si está vinculado a un valor nulo.

Creo que una buena apuesta puede ser utilizar un convertidor para convertir a un valor predeterminado si el enlace devuelve nulo. Sin embargo, no estoy seguro de cómo podría establecer el valor predeterminado de otro valor encuadernado.

Ver convertidores aquí


Lo que estás buscando es algo llamado PriorityBinding (# 6 en this lista)

(del artículo)

El objetivo de PriorityBinding es nombrar enlaces de datos múltiples en orden de más conveniente a menos deseable. De esta forma, si el primer enlace falla, está vacío y / o predeterminado, otro enlace puede tomar su lugar.

p.ej

<TextBox> <TextBox.Text> <PriorityBinding> <Binding Path="LastNameNonExistant" IsAsync="True" /> <Binding Path="FirstName" IsAsync="True" /> </PriorityBinding> </TextBox.Text> </TextBox>


Si tiene problemas con el enlace a valores nulos y PriorityBinding (como señaló Shimmy), puede ir con MultiBinding y un MultiValueConverter como ese:

public class PriorityMultiValueConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { return values.FirstOrDefault(o => o != null); } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }

Uso:

<TextBox> <TextBox.Text> <MultiBinding Converter="{StaticResource PriorityMultiValueConverter}"> <Binding Path="LastNameNull" /> <Binding Path="FirstName" /> </MultiBinding> </TextBox.Text> </TextBox>