Collectionview 阻止 selectionchange

Collectionview preventing selectionchange

我遇到了可能与 collectionview 有关的问题。问题似乎是每个组都会跟踪自己的 selector,这将阻止程序在我 select 之前 selected 项目时触发新的 SelectionChanged 事件上一组。

示例:
第 1 组:
第 1 行
第 2 行(selected)
第 2 组:
第 1 行(selected)

如果我先打开第 1 组并单击第 2 行,然后切换到第 2 组和 select 第一行。如果我再次回到第 1 组并单击第 2 行,则不会触发事件,并且 selecteditem 将与第 2 组保持相同,直到我单击第 1 行。
这是一个问题,因为在某些情况下,一个组中可能只有 1 行。

我的 XAML 看起来像这样(删除了不相关的东西)。

<DataGrid 
  Margin="0,10,0,0"
  SelectionMode="Single"
  IsReadOnly="True"
  Name="InvoiceGrid"
  SelectedItem="{Binding SelectedDiscrepancy, UpdateSourceTrigger=PropertyChanged}"
  RowDetailsVisibilityMode="{Binding RowDetailsVisible}"
  ItemsSource="{Binding InvoiceDiscrepancies}">
  <DataGrid.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="#FF002255" >
                    <Expander.Header>
                      <StackPanel Orientation="Horizontal">
                        <Textblocks for design here.../>
                      </StackPanel>
                    </Expander.Header>
                    <Expander.Content>
                      <ItemsPresenter />
                    </Expander.Content>
                  </Expander>
                </ControlTemplate>
              </Setter.Value>
            </Setter>
          </Style>
        </GroupStyle.ContainerStyle>
      </GroupStyle>
    </DataGrid.GroupStyle>
    <DataGrid.Columns>
      <Columns here/>
    </DataGrid.Columns>
    <DataGrid.RowStyle>
      <style for animating the expanding/>
    </DataGrid.RowStyle>
    <DataGrid.RowDetailsTemplate>
      <DataTemplate>
        <Grid>
          <ListBox Name="listBox3" 
            SelectionMode="Single"
            HorizontalContentAlignment="Stretch"
            ItemTemplate="{StaticResource invoiceItemTemplate}"
            ItemsSource="{Binding Invoices, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
            SelectedItem="{Binding Path=DataContext.SelectedInvoice, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
            </ListBox>
        </Grid>
      </DataTemplate>
    </DataGrid.RowDetailsTemplate>
</DataGrid>

那么,有人知道解决方案是什么吗?是否可以在组之间设置一个 selector,或者我是否应该以某种方式清除 selector 当我 select 父数据网格中的新行时?

编辑: Github 带有问题示例的 repo https://github.com/Snuffsis/GroupingSelect

如果您不需要保留所有选定的列表框项目,您可以清除选择。

作为一个选项,您可以使用 null 值引发 PropertyChanged 以清除当前选择。

public Invoice SelectedInvoice
{
    get => _selectedInvoice;
    set
    {
        if (_selectedInvoice != value)
        {
            if (_selectedInvoice != null) // <- add the 'if' block
            {
                _selectedInvoice = null;
                RaisePropertyChanged(() => SelectedInvoice);
            }
            _selectedInvoice = value;
            RaisePropertyChanged(() => SelectedInvoice);
        }
    }
}