フォールバック値として別のバインディングを持つ方法はありますか?
私はこのようなことをしようとしています:
<Label Content="{Binding SelectedItem.Name, ElementName=groupTreeView,
FallbackValue={Binding RootGroup.Name}}" />
誰かがそれをやってのける別のトリックを持っているなら、それは素晴らしいことです.
フォールバック値として別のバインディングを持つ方法はありますか?
私はこのようなことをしようとしています:
<Label Content="{Binding SelectedItem.Name, ElementName=groupTreeView,
FallbackValue={Binding RootGroup.Name}}" />
誰かがそれをやってのける別のトリックを持っているなら、それは素晴らしいことです.
あなたが探しているのは、PriorityBinding と呼ばれるものです (このリストの #6) 。
(記事より)
PriorityBinding のポイントは、最も望ましいものから最も望ましくないものへの順序で複数のデータ バインディングに名前を付けることです。このようにして、最初のバインディングが失敗した場合、空またはデフォルトの場合、別のバインディングが代わりに使用できます。
例えば
<TextBox>
<TextBox.Text>
<PriorityBinding>
<Binding Path="LastNameNonExistant" IsAsync="True" />
<Binding Path="FirstName" IsAsync="True" />
</PriorityBinding>
</TextBox.Text>
</TextBox>
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>
フォールバック値をどのような条件で使用しますか? バインディングが失敗したことをどのように判断しますか? バインディングは、null 値にバインドされている場合でも有効です。
バインディングが null を返す場合は、コンバーターを使用してデフォルト値に変換することをお勧めします。ただし、別のバインドされた値をデフォルトにする方法がわかりません。
コンバーターはこちら