WPF 分组数据网格行在添加到集合时不可见

本文关键字:集合 添加 数据 数据网 网格 WPF | 更新日期: 2023-09-27 17:54:02

我希望这是一件简单的事情,只是错过了一些明显的东西。 我正在使用 MVVM 并且有一个绑定到CollectionViewSource Datagrid它又填充了一个ObservableCollectionObservableCollection最初未填充并通过 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");
    }
}

WPF 分组数据网格行在添加到集合时不可见

我将以下内容添加到我的 XAML 中,结果我错过了一些小东西,但是在查看了使用 CollectionViewSource 并在数据网格中分组的多个示例后,我只发现微软将其作为 GroupStyle 的一部分

<Expander.Content>
    <ItemsPresenter />
</Expander.Content>

希望这对任何有类似问题的人有所帮助

public ObservableCollection<Booking> _bookings{get;set;}

绑定源必须是属性而不是字段。因为绑定系统使用反射,它只查找属性而不是字段。我希望这会有所帮助。