2014-04-30 4 views
-1

DataGrid가 있는데 행을 선택하면 선택한 항목에 바인딩 된 속성이 올바르게 호출되고 있지만 동일한 행을 다시 클릭하면 (선택 취소) 속성이 변경된 경우 호출되지 않습니다. 이유가 무엇입니까? ItemsSource 객체는 INotifyPropertyChaqnged를 구현하며 VM의 속성은 표준이며, 행을 선택 해제 할 때 작동하지 않는다고 말한 것처럼 말입니다. 여기 내 XAML입니다 :
없음 하나는 두 번째 클릭의 선택 취소가 유효하지 않음을 오른쪽으로DataGrid 행 선택으로 인해 속성이 변경되지 않는다

당신의 가정을보고 싶어 서식 코드 예제를 수정

<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> 

감사

답변

1

먼저

속성이 SelectedItem (SelectedUnselectedItem이 아님)입니다.

두 번째 클릭 만하면 다시 선택되며 UI가 이미 선택되었으므로 아무 것도 실행되지 않습니다.

선택 변경 이벤트가 있더라도 두 번째 선택에서는 실행되지 않습니다.

당신은 당신이 데이터 그리드를 보면 selectedItem가 작품, 일이 얼마나

+0

내가 정확히 알고있는 CheckBox의 열을 사용할 수있는 선택/선택 해제를 위해 무언가를 원하는 경우에 때 항목 트리거는 파란색으로 색상 행의 배경 볼 것이다 IsSelected 속성이 true로 설정되고 해당 트리거가 작동합니다. DataGrid의 SelectedItem 속성과 DataGridRow의 IsSelcted가 동기화되지 않는다고 조금 이상하게 보입니다. – user1531186

+0

당신은 질의와 논평이 SelectedItems의 작동 방식을 알고 있음을 알려주지 않습니다. – Paparazzi

+0

분명히 대답이없고 일부 이벤트가 발생하고 행 배경이 변경됩니다. – user1531186