簡體   English   中英

WPF Listview 組標題不顯示:有什么想法嗎?

[英]WPF Listview Groups Headers Not Displaying: Any Ideas?

下面是 XAML。 來自 object 的數據正在填充列表視圖。 我只是無法顯示組。 我想對一個名為 workcenter 的屬性進行分組,該屬性未顯示在列表視圖中,但它仍然是綁定到它的 class 的一部分。

我是 WPF 菜鳥,所以如果答案就在我面前並且我錯過了,請原諒我。 我正在使用 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>

由於我無法發布圖像,我將嘗試使用文本技巧 map 看看它的外觀。 我得到的是:

**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];
                }
            }
        }

    }
}

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

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

可怕的名字和物品數量沒有大寫......給我一秒鍾打自己的臉......annnnnd......我現在回來了。 Name 和 ItemCount 是編碼的正確方法。

無論如何,感謝所有回復的人的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM