2013-08-21 2 views
6

Мне нужно включить разделитель между элементами в моих списках ListBoxItems, например , где некоторые элементы в источнике моих товаров будут помещены под разделителем и некоторые из них.Включить разделитель в список

Например:

listboxwithaeparator

выше осуществляется путем изменения ControlTemplate в ListBox:

<ScrollViewer> 
    <StackPanel> 
     <ItemsPresenter />           
     <Separator BorderBrush="Red" /> 
     <ListBoxItem Content=".." ContentTemplate="..." x:Key="helpItem"/>          
    </StackPanel> 
</ScrollViewer> 

Проблема, что "helpItem" не выбран, так как это а не частью моего ItemsSource.

В настоящее время возможности выбора было бы достаточно

1) Итак, мой первый вопрос был бы, как я мог бы связать этот элемент с моим ItemsSource или альтернативно сделать его выбираемым?

Более того, в будущем я мог бы wan't иметь больше деталей, которые будут помещены в нижней половина моего ListBox

2) Как бы я физически поместить разделитель в определенном месте между моими деталями , как будто для разделения моего ItemsPresenter в логическом месте?

+0

У меня было это раньше также. Я собрал несколько списков и установил их границы таким образом, чтобы они отображали * внешний вид * одного списка, но под поверхностью каждый фунт имел свой собственный источник. Единственный сложный бит - это координация жестов выбора, так что «опыт» конечного пользователя видел только один выбранный элемент. –

+0

kinda хотел избежать этого :) –

+0

Если вы хотите использовать один элемент управления, для вас все еще есть ответ: выведите класс из VirtualizingStackPanel и внесите в него свой собственный ItemControlGenerator. Я сделал это раньше и могу подтвердить, что это даст то, что вам нужно. С другой стороны, я бы не стал писать ICG как совершенно приятный опыт. :) –

ответ

8

Вместо нескольких ListBox управления, если вы могли бы разделить свою коллекцию на «п» мелкие группы на основе того, сколько Seperator Вам необходимо, вы можете поместить их все вместе через CompositeCollection в то же ListBox

Так, например, говорят, что у меня есть:

public partial class MainWindow : Window { 
    public List<string> CollA { get; set; } 
    public List<string> CollB { get; set; } 
    public MainWindow() { 
    InitializeComponent(); 

    CollA = new List<string> {"A", "B", "C"}; 

    CollB = new List<string> {"D", "E", "F"}; 

    DataContext = this; 
    } 
} 

и я хочу Seperator между CollA и CollB, то мой XAML может быть:

<ListBox> 
    <ListBox.Resources> 
    <CollectionViewSource x:Key="CollectionOne" 
          Source="{Binding CollA}" /> 
    <CollectionViewSource x:Key="CollectionTwo" 
          Source="{Binding CollB}" /> 
    </ListBox.Resources> 
    <ListBox.ItemsSource> 
    <CompositeCollection> 
     <CollectionContainer Collection="{Binding Source={StaticResource CollectionOne}}" /> 
     <ListBoxItem HorizontalContentAlignment="Stretch" 
        IsEnabled="False" 
        IsHitTestVisible="False"> 
     <Rectangle Height="2" 
        Fill="Gray" /> 
     </ListBoxItem> 
     <CollectionContainer Collection="{Binding Source={StaticResource CollectionTwo}}" /> 
    </CompositeCollection> 
    </ListBox.ItemsSource> 
</ListBox> 

, который должен производить:

enter image description here

Теперь элементы функциональны и вы можете связать SelectedItem, и работать с ним, как вы хотите, а также путем проверки SelectedItem от источника-коллекции, вы можете обнаружить к которому относится текущий выбранный элемент списка.

+0

Звучит здорово, я попробую –

Смежные вопросы