2011-07-21 17 views
5

A continuación se muestra el XAML. Los datos del objeto están poblando la vista de lista. Simplemente no puedo hacer que los grupos se muestren. Quiero agrupar en una propiedad llamada workcenter, que no se muestra en la vista de lista, pero sigue siendo parte de la clase vinculada a ella.WPF Listview Groups Encabezados de Grupos No Mostrando: ¿Alguna idea?

Soy un novato de WPF, así que perdónenme si la respuesta está justo delante de mí y me la estoy perdiendo. Estoy usando ejemplos de la web para tratar de hacer que esto funcione, pero no es hasta ahora.

Esta es una maqueta de un proyecto que tengo que hacer, así que ignore el texto tonto y el espacio de nombres. =)

<Window x:Class="Son_of_a_Batching_WPF_Mock_up.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    DataContext="{Binding RelativeSource={RelativeSource Self}}" 
    Title="You Son of a Batch. I'm Detective John Kimble! I'm A Cop You Idiot!" Height="600" Width="800"> 
    <Window.Resources> 
     <CollectionViewSource Source="{Binding testDataCollection}" 
           x:Key="src"> 
      <CollectionViewSource.GroupDescriptions> 
       <PropertyGroupDescription PropertyName="workcenter" /> 
      </CollectionViewSource.GroupDescriptions> 
     </CollectionViewSource> 
    </Window.Resources> 
    <Grid x:Name="mainGrid" Background="White"> 
     <ComboBox x:Name="cboWorkCenters" HorizontalAlignment="Left" VerticalAlignment="Top" Width="256" Background="{x:Null}" Margin="12,50,0,0" SelectedIndex="0" FontSize="12pt" Height="27.28"> 
      <ComboBoxItem Content="Group by work center" FontSize="12pt"/> 
      <ComboBoxItem Content="Group by batch type" FontSize="12pt"/> 
     </ComboBox> 
     <Label x:Name="lblFilter" FontSize ="12pt" HorizontalAlignment="Left" Margin="11.473,13.043,0,0" VerticalAlignment="Top" Content="Filter by work center:" Width="252.527" FontWeight="Bold"/> 
     <ListView x:Name="lvBatches" Margin="12,83,12,12" ItemsSource="{Binding Source = {StaticResource src}}"><!--ItemsSource="{Binding testDataCollection}">--> 

      <ListView.GroupStyle> 
       <GroupStyle> 
        <GroupStyle.ContainerStyle> 
         <Style TargetType="{x:Type GroupItem}"> 
          <Setter Property="Margin" Value="0,0,0,5"/> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate TargetType="{x:Type GroupItem}"> 
             <Expander IsExpanded="True" BorderBrush="#FFA4B97F" BorderThickness="0,0,0,1"> 
              <Expander.Header> 
               <DockPanel> 
                <TextBlock FontWeight="Bold" Text=" {Binding Path=name}" Margin="5,0,0,0" Width="100"/> 
                <TextBlock FontWeight="Bold" Text=" {Binding Path=itemcount}"/> 
               </DockPanel> 
              </Expander.Header> 
              <Expander.Content> 
               <ItemsPresenter /> 
              </Expander.Content> 
             </Expander> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </GroupStyle.ContainerStyle> 
       </GroupStyle> 
      </ListView.GroupStyle> 

      <ListView.View> 
       <GridView> 
        <GridViewColumn x:Name="colID" Header="Batch ID" Width="200" DisplayMemberBinding="{Binding id}"/> 
        <!--<GridViewColumn x:Name="colWC" Header="Work Center" Width="100" DisplayMemberBinding="{Binding workcenter}"/>--> 
        <GridViewColumn x:Name="colStart" Header="Start Time" Width="150" DisplayMemberBinding="{Binding start}"/> 
        <GridViewColumn x:Name="colEnd" Header="End Time" Width="150" DisplayMemberBinding="{Binding end}"/> 
        <GridViewColumn x:Name="colDur" Header="Duration" Width="100" DisplayMemberBinding="{Binding duration}"/> 
        <GridViewColumn x:Name="colBatchType" Header="Batch Type" Width="100" DisplayMemberBinding="{Binding batchtype}"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </Grid> 
</Window> 

Como no puedo publicar imágenes, intentaré ver cómo se ve usando las habilidades de texto. Lo que obtengo es esto:

**Batch ID Start Time End Time Duration Batch Type** 
-------- ---------- -------- -------- ---------- 
12344555 7/21/11  7/22/11  100  Loaded 
54564564 7/21/11  7/23/11  50  Sequential 
12433555 7/21/11  7/22/11  100  Loaded 
54564564 7/21/11  7/23/11  50  Sequential 
12311555 7/21/11  7/22/11  100  Loaded 
54456564 7/21/11  7/23/11  50  Sequential 
12344555 7/21/11  7/22/11  100  Loaded 
57744564 7/21/11  7/23/11  50  Sequential 
12994555 7/21/11  7/22/11  100  Loaded 
54500564 7/21/11  7/23/11  50  Sequential 

Lo que quiero es esto, con 332, 404 siendo los grupos.

**Batch ID Start Time End Time Duration Batch Type** 
-------- ---------- -------- -------- ---------- 
**332** 
12344555 7/21/11  7/22/11  100  Loaded 
12433555 7/21/11  7/22/11  100  Loaded 
12311555 7/21/11  7/22/11  100  Loaded 

**404** 
54564564 7/21/11  7/23/11  50  Sequential 
54564564 7/21/11  7/23/11  50  Sequential 
54500564 7/21/11  7/23/11  50  Sequential 

Aquí está el código detrás. No creo que sea de ayuda. La mayor parte es solo datos de prueba para mostrar en la maqueta.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 
using System.Collections.ObjectModel; 

namespace Son_of_a_Batching_WPF_Mock_up 
{ 
    /// <summary> 
    /// Interaction logic for Window1.xaml 
    /// </summary> 
    public partial class Window1 : Window 
    { 
     private ObservableCollection<TestData> _testDataCollection = new ObservableCollection<TestData>(); 
     public ObservableCollection<TestData> testDataCollection { get { return _testDataCollection; } } 
     //public System.ComponentModel.ICollectionView source { get; set; } 

     public Window1() 
     { 
      InitializeComponent(); 
      //this.source.GroupDescriptions.Add(new PropertyGroupDescription("workcenter")); 

      LoadTestData(); 

     } 

     private void LoadTestData() 
     { 
      //int[] icnt = new int[529]; 
      for (int i = 0; i <= 99; i++) 
      { 
       _testDataCollection.Add(new TestData()); 
      } 
      //for (int i = 0; i < _testDataCollection.Count; i++) 
      //{ 
      // icnt[int.Parse(_testDataCollection[i].workcenter)] ++; 
      //} 
      //this.label1.Content = "332:" + icnt[332].ToString() + "," + "402:" + icnt[402].ToString() + ","+ "404:" + icnt[404].ToString() + "," 
      //  + "522:" + icnt[522].ToString() + ","+ "523:" + icnt[523].ToString() + ","+ "524:" + icnt[524].ToString() + "," 
      //  + "527:" + icnt[527].ToString() + ","+ "528:" + icnt[528].ToString() + ","; 
     } 
    } 

    public class TestData 
    { 
     private string[] _WCs = new string[] { "404", "527", "523", "524", "332", "528", "522", "402" }; 
     private string[] _workcenters = new string[1000]; 
     private string _workcenter; 
     private double _duration = 0; 

     public string id 
     { 
      get { return Guid.NewGuid().ToString(); } 
     } 

     public string workcenter 
     { 
      get 
      { 
       return _workcenter; 
      } 
     } 

     public DateTime start 
     { 
      get { return DateTime.Now; } 
     } 

     public DateTime end 
     { 
      get { return DateTime.Now; } 
     } 

     public double duration 
     { 
      get 
      { 
       return _duration; 
      } 
     } 

     public string batchtype 
     { 
      get 
      { 
       switch (workcenter) 
       { 
        case "332": 
        case "402": 
        case "527": 
         return "Loaded Batch"; 
        case "404": 
        case "524": 
         return "Sequential Batch"; 
        case "522": 
        case "528": 
        case "523": 
         return "Supervisor Batch"; 
        default: 
         return ""; 
       } 
      } 
     } 

     public TestData() 
     { 
      RandomizeWCs(); 
      Random rnd = new Random(); 
      _workcenter = _workcenters[rnd.Next(0, 999)]; 
      rnd = new Random(); 
      _duration = rnd.Next(10, 60); 
     } 

     private void RandomizeWCs() 
     { 
      Random rnd = new Random(); 
      int iIndex, i; 

      while (_workcenters.Contains(null)) 
      { 
       iIndex = rnd.Next(1000); 
       i = rnd.Next(8); 
       if (_workcenters[iIndex] == null) 
       { 
        _workcenters[iIndex] = _WCs[i]; 
       } 
      } 
     } 

    } 
} 
+0

¿Qué muestra, nada en absoluto? – CodingGorilla

+0

Tengo todo para agrupar correctamente ahora, solo el texto del grupo no se muestra. Entonces, básicamente el ejemplo a continuación 'Lo que quiero es esto, con 332, 404 siendo los grupos'. solo sin la visualización ** 332 ** y ** 404 **. No puedo publicar imágenes todavía, lamentablemente. – Yatrix

+2

¡Obtiene mi voto por el nombre "Son_of_a_Batching", usted fargin sneaky bastage! (NOTA: Esta es una referencia de la película "Johnny Dangerously") http://www.imdb.com/title/tt0087507/quotes –

Respuesta

3

irreal: He estado golpeando mi cabeza contra la pared durante horas y me da vergüenza decir que he resuelto mi problema. ¿La solución?

<TextBlock FontWeight="Bold" Text=" {Binding Path=name}" Margin="5,0,0,0" Width="100"/> 
<TextBlock FontWeight="Bold" Text=" {Binding Path=itemcount}"/> 

Freaking name and itemcount no se escriben en mayúscula !!! Dame un segundo para golpearme en la cara ... Annnnnd ... Ya estoy de vuelta. Name y ItemCount son la forma correcta de codificar eso.

Gracias de todos modos por la ayuda a todos los que respondieron.

+2

estado allí tantas veces ... 1001+ para golpearse en la cara! – LucasS

Cuestiones relacionadas