Wpf DataGrid行选择不会触发属性更改

Wpf DataGrid行选择不会触发属性更改,wpf,datagrid,selecteditem,propertychanged,Wpf,Datagrid,Selecteditem,Propertychanged,我有一个datagrid,当我选择一行时,绑定到所选项目的属性将被正确调用,但如果我再次单击同一行,则不会调用属性changed。 知道为什么吗? ItemsSource对象实现INotifyPropertyChaqnged,VM中的属性是标准的,正如我所说的,当我取消选择一行时,它不起作用。 这是我的XAML: <DataGrid CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderC

我有一个datagrid,当我选择一行时,绑定到所选项目的属性将被正确调用,但如果我再次单击同一行,则不会调用属性changed。 知道为什么吗? ItemsSource对象实现INotifyPropertyChaqnged,VM中的属性是标准的,正如我所说的,当我取消选择一行时,它不起作用。 这是我的XAML:

<DataGrid
     CanUserAddRows="False"
     CanUserDeleteRows="False"
     CanUserReorderColumns="False"
     GridLinesVisibility="None"
     ItemsSource="{Binding AllChannelsRecordingSchedule,UpdateSourceTrigger=PropertyChanged}"
     SelectedItem="{Binding SelectedChannelRecordingServer,UpdateSourceTrigger=PropertyChanged}"
     AlternatingRowBackground="{StaticResource VigilantDataGridAlternatingRowColor}"
     ColumnHeaderStyle="{StaticResource VigilantDataGridColumnHeader}"
     RowBackground="White"
     RowHeaderWidth="0"
     AutoGenerateColumns="False"
     FontFamily="Arial"
     FontSize="14"
     MaxWidth="805"
     Height="350"
     Background="White">
     <DataGrid.Resources>
          <Style TargetType="DataGridCell">
               <Setter Property="BorderThickness" Value="0"/>
               <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
          </Style>
     </DataGrid.Resources>
          <DataGrid.RowStyle>
              <Style TargetType="{x:Type DataGridRow}">
                  <Style.Triggers>
                       <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="Background" Value="Transparent" />
                               <Setter Property="Foreground" Value="#000" />
                             </Trigger>
                             <Trigger Property="IsSelected" Value="true">
                                <Setter Property="Background" Value="Blue" />
                                <Setter Property="Foreground" Value="#000" />
                               </Trigger>
                            </Style.Triggers>
                        </Style>
                    </DataGrid.RowStyle>
                    <DataGrid.Columns>
                        <DataGridTextColumn
                            Header="{x:Static p:Resources.SystemRecordingSchedule_ServerName}"
                            Width="*"
                            IsReadOnly="True"
                            Binding="{Binding ServerName,UpdateSourceTrigger=PropertyChanged}">
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="{x:Type TextBlock}">
                                    <Setter Property="HorizontalAlignment" Value="Center" />
                                    <Setter Property="VerticalAlignment" Value="Center" />
                                </Style>
                            </DataGridTextColumn.ElementStyle>
                        </DataGridTextColumn>

                        <DataGridTextColumn
                            Header="{x:Static p:Resources.SystemRecordingSchedule_ServerIP}"
                            MinWidth="120"
                            IsReadOnly="True"
                            Binding="{Binding ServerIP,UpdateSourceTrigger=PropertyChanged}">
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="{x:Type TextBlock}">
                                    <Setter Property="HorizontalAlignment" Value="Center" />
                                    <Setter Property="VerticalAlignment" Value="Center" />
                                </Style>
                            </DataGridTextColumn.ElementStyle>
                        </DataGridTextColumn>

                        <DataGridTextColumn
                            Header="{x:Static p:Resources.SystemRecordingSchedule_ChannelName}"
                            MinWidth="150"
                            IsReadOnly="True"
                            Binding="{Binding ChannelName,UpdateSourceTrigger=PropertyChanged}">
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="{x:Type TextBlock}">
                                    <Setter Property="HorizontalAlignment" Value="Center" />
                                    <Setter Property="VerticalAlignment" Value="Center" />
                                </Style>
                            </DataGridTextColumn.ElementStyle>
                        </DataGridTextColumn>

                        <DataGridTemplateColumn
                            Header="00:00       06:00       12:00       18:00       24:00"
                            MinWidth="350"
                            IsReadOnly="True">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <userControls:SchedulerControl
                                        FullRecordingSchedule="{Binding FullRecordingSchedule,UpdateSourceTrigger=PropertyChanged}"
                                        IsEnabled="False"/>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                    </DataGrid.Columns>
                </DataGrid>

谢谢

首先修复代码示例格式 没有人想向右看

您认为第二次单击取消选择是无效的

属性为SelectedItem而不是SelectedUnsectEdItem

第二次单击只需重新选择,因为它已经被选中,所以UI不会触发任何动作

即使您更改了一个选择事件,它也不会在第二次选择时触发


如果您想要选择/取消选择,您可以使用复选框列

我确切地知道SelectedItem是如何工作的,问题是如果您查看DataGrid触发器,当item IsSelected属性设置为true时,您会看到它将行的背景颜色设置为蓝色,并且该触发器工作。DataGrid的SelectedItem属性和DataGridRow的IsElected属性没有同步,这让我觉得有点奇怪。您的问题和评论并没有向我表明您知道SelectedItems是如何工作的。显然您没有答案,而且还触发了一些事件并导致行背景发生变化。所以颜色发生了变化?因此,假设第二次单击应该取消选择,即使它没有取消选择,并且这不是记录的行为。逻辑性很强。我是在评论中这么说的,还是这正是你想读的?我只是写了一些事件被触发并导致行背景发生变化。。。