2011-07-21 17 views
5

以下是XAML。來自對象的數據正在填充列表視圖。我無法讓這些組展示。我想對名爲workcenter的屬性進行分組,但不會顯示在列表視圖中,但它仍然是綁定到它的類的一部分。WPF Listview組標題不顯示:任何想法?

我是WPF noob,所以請原諒我,如果答案是正確的在我面前,我錯過了它。我正在使用Web上的示例來嘗試使這個工作正常,但這不是這一點。

這是我必須做的一個項目的模型,所以忽略愚蠢的形式文本和命名空間。 =)

<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> 

由於我無法發佈圖片,因此我會嘗試使用文本技巧來繪製圖片的外觀。我所得到的是這樣的:

**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 

我想是這樣的,有332,404作爲組。

**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 

這裏是後面的代碼。我認爲這不會有幫助。它大部分只是測試數據在模型中顯示。

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

什麼顯示,什麼都可以? – CodingGorilla

+0

現在我可以正確地分組了,只有組文本纔會顯示。所以,基本上下面的例子'我想要的是這個,332,404是團體。'只有沒有** 332 **和** 404 **顯示。不幸的是,我無法發佈圖片。 – Yatrix

+2

你讓我的投票支持「Son_of_a_Batching」這個名字,你會狡猾鬼混! (注意:這是對「Johnny Dangerously」的影片引用)http://www.imdb.com/title/tt0087507/quotes –

回答

3

虛幻:我幾個小時都在撞牆,我很尷尬地說我解決了自己的問題。解決方案?

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

令人毛骨悚然的名稱和itemcount沒有大寫!!!給我一秒鐘,讓我自己在臉上... annnnnd ...我現在回來了。 Name和ItemCount是編碼的正確方法。

非常感謝所有回覆的幫助。

+2

曾經有過這麼多次... 1001+在自己的臉上衝出來! – LucasS