0

私のオブジェクトには、セパレーターで区切られたより多くの文字列を格納するプロパティがあります。グループ化を有効にして、WPFリストボックスにそのようなオブジェクトのリストを表示したい。必要なのは、部分文字列に従ってグループを作成することです。

Object1: プロパティ = "string1;string2;string3"

Object2: プロパティ = "string2;string3"

リストボックスが次のように表示されることを期待しています:

文字列1

オブジェクト 1

オブジェクト 2

文字列2

オブジェクト 1

文字列3

オブジェクト 1

オブジェクト 2

それは可能ですか?

ご協力ありがとうございました。

4

1 に答える 1

1

ラッパー クラスを作成します。

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>

楽しむ。

于 2013-03-19T22:33:37.263 に答える