我需要將分組應用於嵌套在TabControl
中的DataGrid
中的行。數據綁定DataGrid
和TabControl
。最外層的控件綁定到一個ViewModel,它暴露了綁定到TabControl
的頁面集合。每個頁面都會顯示一組綁定到Grid
的行。WPF分組嵌套在數據綁定選項卡中的DataGrid
我試圖按照this one from SO和this one from C-SharpCorner這樣的模式。我沒有結婚,所以如果有更好的模式(as this post seems to indicate),我願意走向另一個方向。
現在,我不知道在哪裏注入PropertyGroupDescription
的定義,並將其綁定到我想要的PropertyName
。我嘗試過將它作爲資源並直接作爲DataGrid
上的CollectionViewSource
。但都沒有產生合理的結果。
這是我到目前爲止有:
<UserControl x:Class="View.ViewInvoiceUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" >
<Grid Name="_grid" MinHeight="100">
剪斷,爲了清晰...
<TabControl
ItemsSource="{Binding Path=CurrentInvoice.InvoicePages}"
Grid.Column="0"
Grid.ColumnSpan="4"
Grid.Row="5"
HorizontalAlignment="Left"
Margin="0,4,0,0"
Name="_invoicePageTabControl"
VerticalAlignment="Top">
<TabControl.ItemContainerStyle />
<TabControl.ContentTemplate>
<DataTemplate>
<DataGrid
Name="_invoiceLineGrid"
AutoGenerateColumns="False"
CanUserSortColumns="True"
ColumnHeaderStyle="{StaticResource columnHeaderStyle}"
HorizontalAlignment="Left"
ItemsSource="{Binding InvoiceLines}"
IsReadOnly="True"
RowDetailsVisibilityMode="VisibleWhenSelected"
RowStyle="{StaticResource DataGridRowStyle}"
SelectionUnit="FullRow"
VerticalAlignment="Top"
Visibility="{Binding Path=InvoiceLineGridVisibility}"
Initialized="_invoiceLineGrid_Initialized">
<DataGrid.Columns>
<DataGridTextColumn Header="Line Number" MinWidth="50" Binding="{Binding InvoiceLineNumber}" />
<DataGridTextColumn Header="Description" MinWidth="50" Width="*" Binding="{Binding Description}" />
<DataGridTextColumn Header="Quantity" MinWidth="50" Binding="{Binding Quantity}" />
<DataGridTextColumn Header="Extended Cost" MinWidth="50" Width="*" Binding="{Binding ExtendedCost}" />
</DataGrid.Columns>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander>
<Expander.Header>
<StackPanel>
<TextBlock Text="{Binding Name}" />
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Grid>
</UserControl>
我想我需要添加類似:
<CollectionViewSource>
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="DepartmentBillingCode" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
如果我添加CollectionViewSource
作爲資源並更改DataGrid
綁定,網格中沒有行。 如果我添加了CollectionViewSource
到DataGrid
,我得到一個異常:嵌套在Add value to collection of type 'System.Windows.Controls.ItemCollection' threw an exception.
Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead.
但我沒有看到一個GroupDescription
或PropertyGroupDescription
上DataGrid.ItemSource
所以,我現在感覺喪失。 任何建議表示讚賞。
謝謝
@ГеоргийЛанец,感謝您的編輯。很高興看到老問題得到一點關注。 – 2015-12-02 22:31:07
保羅,你的歡迎。我喜歡將代碼帶入完美。這就是爲什麼我總是在採取最後期限。 – 2015-12-02 22:57:00