0

我有一个ViewLookupItem具有以下属性的类型项目列表:

显示没有组的 LookupItems 的属性

例如,这个项目示例没有组,但是一个项目可以属于一个组,如下所示:

显示带有组的 LookupItems 的属性

我想要做的是,当一个项目属于一个组时,我想在分隔符下显示它,如果该项目不属于一个组,则正常显示它,这是我当前ListBox的下面(左边的那个):

列表框

当项目属于一个组时,我希望它看起来像这样:

分组列表框

我想我需要使用某种触发器,但我不知道如何使用它们,任何帮助将不胜感激:) 这是我当前的 XAML ListBox

<ListBox BorderBrush="Black" 
         Height="303" 
         HorizontalAlignment="Left" 
         Margin="15,59,0,0" 
         Name="lstResults" 
         VerticalAlignment="Top" 
         Width="295" 
         SelectionMode="Multiple" 
         AllowDrop="True" 
         local:ListBoxSelector.Enabled="True"     
         PreviewMouseLeftButtonDown="lstResults_PreviewMouseLeftButtonDown" 
         PreviewMouseMove="lstResults_PreviewMouseMove" TabIndex="1" 
         PreviewMouseDoubleClick="lstResults_PreviewMouseDoubleClick">
    <ListBox.ItemTemplate>
        <DataTemplate>                
            <TextBlock Text="{Binding TextValue}" 
                       TextWrapping="Wrap" 
                       FontSize="14"/>                    
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
4

1 回答 1

0

您可以在您的收藏上创建一个收藏视图,并告诉它按您的Group属性分组。然后,您可以GroupStyle在 yourListBox上定义一个来定义分组的可视化方式。

这是一个简单的示例(不遵循最佳实践或 MVVM 或任何东西,但用于说明您的场景的集合视图):

MainWindow.xaml.cs

using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows;
using System.Windows.Data;

namespace SO11343251
{
    public partial class MainWindow : Window
    {
        private readonly ICollection<ViewLookupItem> items;
        private readonly ICollectionView itemsView;

        public MainWindow()
        {
            InitializeComponent();

            this.items = new List<ViewLookupItem>();

            this.items.Add(new ViewLookupItem("Amenities", "No Group"));
            this.items.Add(new ViewLookupItem("Indoor", "Area"));
            this.items.Add(new ViewLookupItem("Outdoor", "Area"));

            this.itemsView = new ListCollectionView((IList)this.items);
            this.itemsView.GroupDescriptions.Add(new PropertyGroupDescription("Group"));

            this.DataContext = this;
        }

        public ICollection<ViewLookupItem> Items
        {
            get { return this.items; }
        }

        public ICollectionView ItemsView
        {
            get { return this.itemsView; }
        }
    }

    public class ViewLookupItem
    {
        private readonly string name;
        private readonly string group;

        public ViewLookupItem(string name, string group)
        {
            this.name = name;
            this.group = group;
        }

        public string Name
        {
            get { return this.name; }
        }

        public string Group
        {
            get { return this.group; }
        }
    }
}

MainWindow.xaml

<Window x:Class="SO11343251.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <ListBox ItemsSource="{Binding ItemsView}">
        <ListBox.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock x:Name="textBlock" FontWeight="Bold" Text="{Binding Name}"/>

                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding Name}" Value="No Group">
                                <Setter TargetName="textBlock" Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </ListBox.GroupStyle>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Window>

结果

在此处输入图像描述

于 2012-07-05T12:03:18.777 回答