Значение FallbackValue привязки WPF для привязки
есть ли способ иметь другую привязку в качестве резервного значения?
Я пытаюсь сделать что-то вроде этого:
<Label Content="{Binding SelectedItem.Name, ElementName=groupTreeView,
FallbackValue={Binding RootGroup.Name}}" />
Если у кого-то есть еще один трюк, чтобы вытащить его, это было бы здорово.
3 ответов
то, что вы ищете, называется PriorityBinding (#6 on этой список)
(из статьи)
точка PriorityBinding-это имя нескольких Привязок данных по порядку из самых желанных к наименее желанным. Таким образом, если первая привязка не, пусто и / или по умолчанию, другое привязка может занять его место.
например
<TextBox>
<TextBox.Text>
<PriorityBinding>
<Binding Path="LastNameNonExistant" IsAsync="True" />
<Binding Path="FirstName" IsAsync="True" />
</PriorityBinding>
</TextBox.Text>
</TextBox>
при каких условиях вы хотите использовать резервное значение? Как бы вы определили, что привязка не удалась? Привязка по-прежнему действительна, даже если она привязана к нулевому значению.
Я думаю, что хорошей ставкой может быть использование конвертера для преобразования в значение по умолчанию, если привязка возвращает null. Я не уверен, как вы можете по умолчанию использовать другое привязанное значение.
проверить конвертеры здесь
Если у вас возникли проблемы с привязкой к нулевым значениям и PriorityBinding (как указал Шимми) , вы можете пойти с MultiBinding и MultiValueConverter, как это:
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();
}
}
использование:
<TextBox>
<TextBox.Text>
<MultiBinding Converter="{StaticResource PriorityMultiValueConverter}">
<Binding Path="LastNameNull" />
<Binding Path="FirstName" />
</MultiBinding>
</TextBox.Text>
</TextBox>