带有CheckboxColumn的DataGrid不注册SelectedItem

本文关键字:注册 SelectedItem DataGrid CheckboxColumn 带有 | 更新日期: 2023-09-27 18:05:44

我在WPF中有一个数据网格。它使用MVVM绑定到一个ViewModel。它可以很好地与DataGridTextColumns一起工作,这些列显示有关DataGrid绑定到的对象列表的信息。单击一行选择它,这也可以工作,触发一系列事件,使我能够深入处理给定的行和派生信息。

然后我添加了一个DataGridCheckBoxColumn,这样我就可以选择项目,并在需要时从列表中删除它们。然而,这打破了一切。注意,ViewModel完全保持不变,DataGrid的SelectedItem事件现在似乎根本没有触发。有人能帮我吗?这样我既能保留原来的功能,又能保留复选框列,帮助用户快速完成他/她需要做的事情。

相关XAML:

<DataGrid Name="ArticlesOverviewDataGrid" IsReadOnly="True" 
          ItemsSource="{Binding Project.Articles}"  IsSynchronizedWithCurrentItem="True" 
          Style="{StaticResource DataGridStyle}"  SelectionUnit="FullRow"
          AutoGenerateColumns="False"   SelectionMode="Single" 
          SelectedItem="{Binding SelectedArticle, Mode=TwoWay}">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Width="65" HeaderStyle="{StaticResource DgchStyle}" Binding="{Binding IsDuplicate, UpdateSourceTrigger=PropertyChanged}" Header="Duplicate" ElementStyle="{StaticResource DataGridCheckBoxColumnElementStyle}"/>
        <DataGridTextColumn Width="*" HeaderStyle="{StaticResource DgchStyle}" Binding="{Binding Name}" Header="Name" ElementStyle="{StaticResource DataGridTextColumnElementStyle}" />
        <DataGridTextColumn Width="*" HeaderStyle="{StaticResource DgchStyle}" Binding="{Binding Author}" Header="Author" ElementStyle="{StaticResource DataGridTextColumnElementStyle}" />
        <DataGridTextColumn Width="100" HeaderStyle="{StaticResource DgchStyle}" Binding="{Binding PublicationDate}" Header="Publication Date" ElementStyle="{StaticResource DataGridTextColumnElementStyle}"/>
    </DataGrid.Columns>
    <DataGrid.InputBindings>
        <MouseBinding Gesture="LeftDoubleClick" Command="{Binding ShowProject}"/>
    </DataGrid.InputBindings>
</DataGrid>

再次,如果我删除checkbox列,这一切都可以工作,这意味着它在DataGrid中选择一个项目时出现混乱,但我似乎找不到任何有关为什么它会中断或如何规避此问题的相关信息。

<DataGridCheckBoxColumn Width="65" HeaderStyle="{StaticResource DgchStyle}" Binding="{Binding IsDuplicate, UpdateSourceTrigger=PropertyChanged}" Header="Duplicate" ElementStyle="{StaticResource DataGridCheckBoxColumnElementStyle}"/>

带有CheckboxColumn的DataGrid不注册SelectedItem

尝试使用模板列并将其设置为DataTemplate,而不是使用复选框:

        <DataGridTemplateColumn Width="65" HeaderStyle="{StaticResource DgchStyle}" Header="Duplicate" ElementStyle="{StaticResource DataGridCheckBoxColumnElementStyle}">
            <DataTemplate>
                <CheckBox IsChecked="{Binding IsDuplicate, UpdateSourceTrigger=PropertyChanged}" />
            </DataTemplate>
        </DataGridTemplateColumn>