2017-09-06 85 views
0

我有一個列表框,我試圖插入項目之間的分隔符,但我想分隔符顯示何時有多個項目。列表框項目分隔符多個項目時

<ListBox Grid.Row="1" x:Name="WarningListBox" Visibility="Visible" 
        HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" 
        ItemsSource="{Binding Path=Warnings}"> 
    <ListBox.Style> 
     <Style TargetType="{x:Type ListBox}"> 
      <Setter Property="Height" Value="0"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding CanShowAll}" Value="True"> 
        <Setter Property="Height" Value="Auto"/> 
        <Setter Property="MaxHeight" Value="120"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ListBox.Style> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem" BasedOn="{StaticResource NewDesignListItemBoxStyle}"> 
      <Setter Property="Margin" Value="0"/> 
      <Setter Property="Padding" Value="0"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    <ListBox.Resources> 
     <DataTemplate x:Key="TypeOneViewModel" DataType="{x:Type vm:TypeOneViewModel}"> 
      <notifications:TypeOneNotification Focusable="False" MinHeight="30" Background="Beige"/> 
     </DataTemplate> 
     <DataTemplate x:Key="TypeTwoViewModel" DataType="{x:Type vm:TypeTwoViewModel}"> 
      <notifications:TypeTwoNotification Focusable="False" MinHeight="30" Background="Beige"/> 
     </DataTemplate> 
    </ListBox.Resources> 
    <ListBox.ItemTemplateSelector> 
     <templateSelectors:WarningTemplateSelector 
      TypeOneDataTemplate="{StaticResource TypeOneViewModel}" 
      TypeTwoDataTemplate="{StaticResource TypeTwoViewModel}"/> 
    </ListBox.ItemTemplateSelector> 
</ListBox> 

我已經試過關閉標籤 <Separator Margin="30 0 30 0" BorderBrush="#CCCCCC" BorderThickness="2"/> 前右側添加分隔符,但它的應用程序崩潰。我應該把它放在DataTemplate中嗎?我認爲它會顯示在每個項目下(即使只有一個項目)。

+0

嘗試使用DataTrigger,並將其綁定到previousData,並設置FallBackValue – sTrenat

+0

或者您是否想在第一個項目下顯示一個分隔符,哪裏有多個項目? – sTrenat

+0

只有當只有一個項目時,你想隱藏分隔符*嗎?有兩個或更多項目時,如果最後一個項目下方有分隔符,可以嗎? –

回答

2

我認爲,要實現這樣的事情:

<DataTemplate x:Key="TypeOneViewModel" DataType="{x:Type vm:TypeOneViewModel}"> 
    <DockPanel LastChildFill="True"> 
     <Separator x:Name="separator" HorizontalAlignment="Stretch" VerticalAlignment="Top" DockPanel.Dock="Top"> 
      <Separator.Style> 
       <Style TargetType="Separator"> 
        <Setter Property="Visibility" Value="Visible"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}, FallbackValue={x:Null}}" Value="{x:Null}"> 
          <Setter Property="Visibility" Value="Collapsed"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Separator.Style> 
     </Separator> 
     <!--Rest of your DataTemplate--> 
     <notifications:TypeOneNotification Focusable="False" MinHeight="30" Background="Beige"/> 
    </DockPanel> 
</DataTemplate> 

這將隱藏分隔符,如果項目沒有PreviousData,所以對於第一個項目。

如果多次使用分隔符樣式,並且將其稱爲StaticResource,那麼您可以輕鬆地將分隔符樣式放在外面。

+0

但我應該在哪裏添加此代碼? (對不起,我仍然是一個初學xaml) – Val

+0

@ValCool那裏,你有你的DataTemplates聲明,在x:Key TypeOneViewModel和TypeTwo – sTrenat

+0

我仍然不明白爲什麼,但它的工作原理!謝謝! – Val