WPF Binding FallbackValue установлен в Binding - PullRequest
34 голосов
/ 16 декабря 2009

Есть ли способ использовать другую привязку в качестве запасного значения?

Я пытаюсь сделать что-то вроде этого:

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

Если бы у кого-то был еще один трюк, это было бы здорово.

Ответы [ 3 ]

69 голосов
/ 16 декабря 2009

То, что вы ищете, называется PriorityBinding (# 6 в этом списке)

(из статьи)

Приоритет привязки заключается в Назовите несколько привязок данных в порядке из наиболее желательных в наименее желательных. Таким образом, если первая привязка не удалась, пусто и / или по умолчанию, другое переплет может занять свое место.

, например

<TextBox>
    <TextBox.Text>
        <PriorityBinding>
            <Binding Path="LastNameNonExistant" IsAsync="True" />
            <Binding Path="FirstName" IsAsync="True" />
        </PriorityBinding>
    </TextBox.Text>
</TextBox>
3 голосов
/ 17 августа 2015

Если у вас возникнут проблемы с привязкой к нулевым значениям и 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>
3 голосов
/ 16 декабря 2009

При каких условиях вы хотели бы использовать значение Fallback? Как бы вы определили, что привязка не удалась? Привязка остается действительной, даже если она связана с нулевым значением.

Я думаю, что хорошей ставкой может быть использование конвертера для преобразования в значение по умолчанию, если привязка возвращает ноль. Я не уверен, как вы могли бы по умолчанию использовать другое связанное значение.

Проверьте конвертеры здесь

...