我的对象具有存储更多由分隔符分隔的字符串的属性。我想在启用分组的 WPF 列表框中显示此类对象的列表。我需要的是根据子字符串进行分组。
对象 1:属性 =“字符串 1;字符串 2;字符串 3”
对象 2:属性 =“字符串 2;字符串 3”
我希望列表框像这样显示:
字符串1
对象 1
对象 2
字符串2
对象 1
字符串3
对象 1
对象 2
那可能吗?
谢谢您的帮助。
我的对象具有存储更多由分隔符分隔的字符串的属性。我想在启用分组的 WPF 列表框中显示此类对象的列表。我需要的是根据子字符串进行分组。
对象 1:属性 =“字符串 1;字符串 2;字符串 3”
对象 2:属性 =“字符串 2;字符串 3”
我希望列表框像这样显示:
对象 1
对象 2
对象 1
对象 1
对象 2
那可能吗?
谢谢您的帮助。
创建一个包装类。
class MyGroup
{
public string GroupID;
public object SomeObject;
}
构建该包装类的平面列表。
private List<MyGroup> BuildItemsSourceTogether()
{
List<MyGroup>itemsSource = new List<MyGroup>();
foreach(var obj in myListWithObjectsWhichPropertiesAreStringsWhichFuthermoreContainSubstrings)
{
var stringArray = obj.Property123.Split(';');
foreach(var str in stringArray)
{
itemsSource.Add(new MyGroup () { GroupID = str, SomeObject = obj});
}
}
return itemsSource;
}
告诉包装类中的哪些属性应该用于分组。
class Window1
{
public Window1()
{
InitalizeComponents();
var finalData = new ListCollectionView(BuildItemsSourceTogether());
finalData.GroupDescriptions.Add(new PropertyGroupDescription("GroupID"));
this.DataContext = finalData;
}
}
在 XAML 中设置您的组的外观,并让 WPF 为您分组该平面 ID 列表。
我使用了带有列的 DataGrid。您可以使用列表框。
<DataGrid ItemsSource="{Binding}">
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander>
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=ItemCount}"/>
<TextBlock Text="Items"/>
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="header1" Binding="{Binding SomeObject.Property321}" />
<DataGridTextColumn Header="header2" Binding="{Binding SomeObject.Property678}" />
</DataGrid.Columns>
</DataGrid>
玩得开心。