2010-09-24 14 views
6

Mam niestandardową kontrolę użytkownika napisałem w WPF, aby wyświetlić niektóre dane. Chcę wyświetlić tę kontrolkę użytkownika na liście, ale chcę również zapewnić wiele nagłówków kolumn (pasujących do niektórych właściwości na cotrolu użytkownika), aby użytkownicy mogli sortować właściwości zawarte w kontrolce użytkownika.Najlepszy sposób na łączenie wielu kolumn w siatkę/listę WPF?

Nie jestem pewien, jak najlepiej to zrobić.

Aktualnie mam ListBox wyświetlający te kontrolki użytkownika, ale ListBox nie ma nagłówka i nie mogę wymyślić, jak umieścić wiele nagłówków w ListBox.

Idealnie chciałabym coś takiego:

Header1 Header2 Header3 Header4 
[UserControlThatSpansAllFourColumns] 

Moja druga myśl była w użyciu DataGrid i jakoś każdy element span wiele kolumn, ale do tej pory nie mogę zrozumieć, że się obaj.

Jeśli ktoś ma jakieś wskazówki, powitam ich!

Odpowiedz

3

Ok, nie jest to w żadnym wypadku "najlepszy sposób", ale po prostu wrzucę to. Jednym ze sposobów, które są potrzebne, jest użycie ListView z niestandardowym ItemContainerStyle, który używa <ContentPresenter> zamiast domyślnego <GridViewRowPresenter>. Ten krótki XAML nieco demonstruje to:

<ListView> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListViewItem"> 
         <ContentPresenter/> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Header1"/> 
      <GridViewColumn Header="Header2"/> 
     </GridView> 
    </ListView.View> 

    <Button>Item1</Button> 
    <Button>Item2</Button> 

</ListView> 

Tutaj otrzymujesz nagłówki kolumn oraz pozycje w całym widoku listy. W tym rozwiązaniu renderowanie przedmiotów jest jednak odrębnym światem. Nie jest tak naprawdę podłączony do kolumn zdefiniowanych dla ListView. Sądzę więc, że jednym ze sposobów ulepszenia tej pracy jest dostarczenie własnej implementacji <RowPresenter>, która faktycznie uwzględnia kolumny GridViewColumns zdefiniowane w nadrzędnym widoku listy.

W każdym razie, mam nadzieję, że to pomaga.

+0

Dziękuję bardzo! Zasadniczo to, czego szukałem. Wymieniłem ContentPresenter na niestandardowy UserControl i zadziałało. Trochę magii sortowania i będę miał kompletne rozwiązanie. –

+0

To jest pomocne, proszę, daj mi znać, w jaki sposób możemy zachować kilka kolumn tak jak jest i połączyć tylko określone kolumny? – robot