Расширитель как элемент ListView

Мне нужно выполнить ListView с одним столбцом, где этот столбец представляет собой расширитель.

В частности, у меня есть такой класс:

public class MyItemT
{
    public string Title { get; set; }
    public TextBlock Info { get; set; }
}

И список этих объектов:

List<MyItemT> Mylist = new List<MyItemT>();

Мне нужно заполнить ListView объектами Expander, где заголовок привязан к заголовку, а содержимое — к свойству Info.

Например, ListView Expander выглядит следующим образом:

<Expander Header="My Expander">
   <TextBlock TextWrapping="Wrap">
      Lorem ipsum dolor sit amet, consectetur
      adipisicing elit, sed do eiusmod tempor incididunt ut
      labore et dolore magna aliqua
   </TextBlock>
</Expander>

Мой расширитель

... и так далее (много, сколько есть элементов моего ListView)...

В ListView не должно быть строки заголовка, и, конечно, все будет сделано программно.

Как это сделать? Спасибо.


person gliderkite    schedule 07.05.2012    source источник


Ответы (1)


Просто определите ItemTemplate для вашего ListView и поместите Expander внутрь. Это, по крайней мере, работает для других элементов управления внутри ListView, так что это должно работать и здесь.

<ListView ItemsSource="{Binding YourSource}" Name="listView">
  <ListView.ItemTemplate>
    <DataTemplate>
      <Expander Header="{Binding Title}">
        <TextBlock TextWrapping="Wrap" Text="{Binding Info}" />
      </Expander>
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>

Привязка также может быть выполнена с помощью кода, подобного этому.

List<MyItemT> Mylist = new List<MyItemT>();
listView.ItemsSource = Mylist;

Одна вещь, которую вы должны изменить, — это тип вашего свойства Info, он должен быть строкового типа.

О, и ваш класс должен реализовать INotifyPropertyChanged, иначе привязка не всегда будет работать корректно.

person shriek    schedule 07.05.2012
comment
ItemSource не является свойством ListView. Под YourSource вы имеете в виду MyList of MyItemT? - person gliderkite; 07.05.2012
comment
@gliderkite: это то, что я получаю за кодирование в редакторе. это должно быть ItemsSource (с еще одним 's'). И да, это будет список вашего типа. - person shriek; 07.05.2012