2011-04-04 58 views
1

我有一個具有兩個ObservableCollections的多重綁定的DataBinding,並且我想在使用MultiConverter的條件之間切換它們。 所以轉換器給出了正確的集合,但綁定似乎沒有更新。使用多重綁定切換綁定源

任何想法?

映入眼簾,

于爾根

回答

4

這是你需要轉換器:

public class SwitchCollectionsConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     bool b = (bool)values[2]; 

     if (b) 
      return values[0]; 
     else 
      return values[1]; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

註冊的轉換器:綁定的

<local:SwitchCollectionsConverter x:Key="TheConverter" /> 

用法:

<ItemsControl> 
     <ItemsControl.ItemsSource> 
      <MultiBinding Converter="{StaticResource TheConverter}"> 
       <Binding Path="FirstCollection" /> 
       <Binding Path="SecondCollection" /> 
       <Binding Path="IsFirst" /> 
      </MultiBinding> 
     </ItemsControl.ItemsSource> 
    </ItemsControl> 

,你有一個FirstCollection,一個SecondCollection和IsFirst屬性中的DataContext

+0

那是我有什麼,它似乎是工作,不過我的看法似乎並沒有被更新,如果原來的結合是其替換另一個來自MultiBinding。我總是有樹中顯示的舊數據... – opiswahn 2011-04-04 08:51:13

+2

您是否在所有三個屬性上實現了INotifyPropertyChanged? (是的,在這裏ObservableCollections不會幫助) – 2011-04-04 08:54:26

+0

我認爲這與它無關。可以說原始綁定在FirstCollection上,並且將改變爲SecondCollection,所以Binging會改變,而不是集合本身......或者我在這裏錯了嗎? – opiswahn 2011-04-04 10:59:50

0

的假設下,你需要更新源列表視圖?

如果是這樣,你的結合應該是雙向模式:

<TextBox Text="{Binding Source, Mode="TwoWay"}" />