39

フォールバック値として別のバインディングを持つ方法はありますか?

私はこのようなことをしようとしています:

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

誰かがそれをやってのける別のトリックを持っているなら、それは素晴らしいことです.

4

3 に答える 3

79

あなたが探しているのは、PriorityBinding と呼ばれるものです (このリストの #6) 。

(記事より)

PriorityBinding のポイントは、最も望ましいものから最も望ましくないものへの順序で複数のデータ バインディングに名前を付けることです。このようにして、最初のバインディングが失敗した場合、空またはデフォルトの場合、別のバインディングが代わりに使用できます。

例えば

<TextBox>
    <TextBox.Text>
        <PriorityBinding>
            <Binding Path="LastNameNonExistant" IsAsync="True" />
            <Binding Path="FirstName" IsAsync="True" />
        </PriorityBinding>
    </TextBox.Text>
</TextBox>
于 2009-12-16T18:01:42.643 に答える
4

null 値へのバインドと PriorityBinding で問題が発生した場合 (Shimmy が指摘したように)、次のように 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>
于 2015-08-17T08:46:09.010 に答える
3

フォールバック値をどのような条件で使用しますか? バインディングが失敗したことをどのように判断しますか? バインディングは、null 値にバインドされている場合でも有効です。

バインディングが null を返す場合は、コンバーターを使用してデフォルト値に変換することをお勧めします。ただし、別のバインドされた値をデフォルトにする方法がわかりません。

コンバーターはこちら

于 2009-12-16T16:08:27.380 に答える