2016-04-15 44 views
0

我想要做的是有一個ItemsControl,我可以指定它的哪些項目是可見的。我爲ItemContainer創建了一個DataTemplate,但我不知道我綁定的元素的名稱,或者是「索引」,它將是它在列表中的哪個項目的數字表示。ItemsControl的項目展示者的屬性與其在列表中的位置相關聯?

    <ItemsControl ItemsSource="{Binding Charts}" 
            x:Name="ItemsControl"> 
         <ItemsControl.ItemTemplate> 
          <ItemContainerTemplate > 
           <ContentPresenter Content="{Binding}"> 
            <ContentPresenter.Visibility> 
             <MultiBinding Converter="{StaticResource }"> 
              <Binding ElementName="" 
                Path=""/> 
              <Binding Path="WhichAreVisible" /> 
             </MultiBinding> 
            </ContentPresenter.Visibility> 
           </ContentPresenter> 
          </ItemContainerTemplate> 
         </ItemsControl.ItemTemplate> 
        </ItemsControl> 

編輯

按柯蕾曼的建議,我在列表中創建的對象的索引屬性和設置綁定到,但是當我把一個斷點在我轉換我看到的價值該綁定是DependancyProperty.UnsetValue數據上下文是該對象,對象上有一個屬性,爲什麼它看不到該屬性?

    <ItemsControl ItemsSource="{Binding Charts}" 
            x:Name="ItemsControl"> 
         <ItemsControl.ItemTemplate> 
          <ItemContainerTemplate > 
           <ContentPresenter Content="{Binding}"> 
            <ContentPresenter.Visibility> 
             <MultiBinding Converter="{StaticResource Converter}"> 
              <Binding Path="Index"/> 
              <Binding Path="WhichAreVisible" /> 
             </MultiBinding> 
            </ContentPresenter.Visibility> 
           </ContentPresenter> 
          </ItemContainerTemplate> 
         </ItemsControl.ItemTemplate> 
        </ItemsControl> 
+0

更好的ItemsSource屬性綁定到帶有過濾器的CollectionViewSource。 – Clemens

+0

@Clemens如果我們可以這樣做,這將是一個更好的解決方案,但我們不能。 – kleineg

+0

@Clemens你知道名字和路徑嗎? – kleineg

回答

1

您可以將ContentPresenter(包含項目)的Visibility屬性綁定到數據項類中相應的屬性,在分配給ItemsControl的的ItemContainerStyle物業的風格。

給出一個DataContext像

DataContext = new object[] 
{ 
    new { Text = "Item 1", IsVisible = true }, 
    new { Text = "Item 2", IsVisible = false }, 
    new { Text = "Item 3", IsVisible = true }, 
    new { Text = "Item 4", IsVisible = false }, 
    new { Text = "Item 5", IsVisible = true }, 
}; 

以下的ItemsControl只會顯示第一,第三和最後一個項目:

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/> 
</Window.Resources> 
... 
<ItemsControl ItemsSource="{Binding}"> 
    <ItemsControl.ItemContainerStyle> 
     <Style TargetType="ContentPresenter"> 
      <Setter Property="Visibility" 
       Value="{Binding IsVisible, 
         Converter={StaticResource BooleanToVisibilityConverter}}"/> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Text}"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
相關問題