WPF 分组数据网格行在添加到集合时不可见
本文关键字:集合 添加 数据 数据网 网格 WPF | 更新日期: 2023-09-27 17:54:02
我希望这是一件简单的事情,只是错过了一些明显的东西。 我正在使用 MVVM 并且有一个绑定到CollectionViewSource
Datagrid
它又填充了一个ObservableCollection
,ObservableCollection
最初未填充并通过 UI 上的复选框添加到
我遇到的问题是,当添加ObservableCollection
时,标题会显示在DataGrid
上的分组,但各个行本身不会。
任何帮助真的非常感谢,
这是我的数据网格 XAML
<DataGrid DataContext="{Binding GroupedBookings}"
ItemsSource="{Binding SourceCollection}"
AutoGenerateColumns="False"
SelectionMode="Single"
SelectionUnit="FullRow"
CanUserSortColumns="True"
SelectedItem="{Binding SelectedBooking}"
CanUserAddRows="False">
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=MemberCount.SupporterType}"
FontWeight="Bold"
Padding="3" />
</StackPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander>
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=ItemCount}"
Margin="8 0 4 0" />
</StackPanel>
</Expander.Header>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Cost"
Binding="{Binding Cost}" />
<DataGridTextColumn Header="Order No"
Binding="{Binding LinkedOrderID}" />
</DataGrid.Columns>
</DataGrid>
和我的集合代码
_bookings = new ObservableCollection<Booking>(rep.Bookings_Get().Where(x => x.JobID == CurrentJob.JobID));
GroupedBookings = CollectionViewSource.GetDefaultView(Bookings);
GroupedBookings.GroupDescriptions.Add(new PropertyGroupDescription("MemberCount.SupporterType"));
为了确认可观察集合更新正常,VM 中的CollectionView
也是如此,标题中的ItemCount
甚至在 UI 中增加,我似乎无法显示行。
提前致谢
编辑:
我已经根据 EthicalLogics 的建议将我的代码更改为直接分配给Bookings
而不是_bookings
,但这并没有帮助Bookings
定义如下:
public ObservableCollection<Booking> Bookings
{
get { return _bookings; }
set
{
_bookings = value;
OnPropertyChanged("Bookings");
}
}
这是GroupedBookings
public ICollectionView GroupedBookings
{
get { return _groupedBookings; }
set
{
_groupedBookings = value;
OnPropertyChanged("GroupedBookings");
}
}
我将以下内容添加到我的 XAML 中,结果我错过了一些小东西,但是在查看了使用 CollectionViewSource 并在数据网格中分组的多个示例后,我只发现微软将其作为 GroupStyle 的一部分
<Expander.Content>
<ItemsPresenter />
</Expander.Content>
希望这对任何有类似问题的人有所帮助
public ObservableCollection<Booking> _bookings{get;set;}
绑定源必须是属性而不是字段。因为绑定系统使用反射,它只查找属性而不是字段。我希望这会有所帮助。