2009-12-16 155 views
30

有沒有辦法讓另一個綁定作爲回退值?WPF綁定FallbackValue設置爲綁定

我試圖做這樣的事情:

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

如果任何人有另一種伎倆,把它關閉,這將是巨大的。

回答

62

你所尋找的是(this名單#6)稱爲PriorityBinding東西

(文章)

點到PriorityBinding是 名多數數據綁定的順序是最不希望的 。 這種方式如果第一個綁定失敗, 是空的和/或默認的,另一個 綁定可以取代它。

例如,

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

問題是,PriorityBinding將空字符串視爲成功綁定 – Shimmy 2010-02-08 20:39:59

+4

[MSDN](https://msdn.microsoft.com/zh-cn/library/system.windows.data.prioritybinding%28v=vs.110 %29.aspx):'DependencyProperty.UnsetValue的值不被視爲成功的返回值。「 - 所以只需在綁定中使用Converter即可,如果您的值爲null,則返回該屬性。 @Shimmy – 2015-11-05 09:14:38

3

在什麼條件下,您希望使用回退值?你如何確定綁定失敗?即使綁定爲空值,綁定仍然有效。

我認爲一個很好的選擇可能是使用轉換器轉換爲默認值,如果綁定返回null。我不確定如何默認到另一個綁定值。

退房converters here

+0

在我的情況下,這是我90%的地方+肯定DataContext會在它上面有一個特定的屬性,但是我想回到調用'.ToString()'的地方/如果沒有。 – tobriand 2017-02-08 13:53:35

1

如果遇到問題,結合空值和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>