2016-11-23 74 views
0

我有以下的DataGrid:如何让我的DataGrid行只在通过CheckBox选择时才高亮显示?

<DataGrid x:Name="TheList" Grid.Row="1" ItemsSource="{Binding People}" SelectionMode="Extended" SelectionUnit="FullRow" AutoGenerateColumns="False" 
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Binding="{Binding IsSelected}"> 
      <DataGridCheckBoxColumn.HeaderTemplate> 
       <DataTemplate> 
        <CheckBox IsChecked="{Binding Path=DataContext.AllSelected, RelativeSource={RelativeSource AncestorType=DataGrid}}"></CheckBox> 
       </DataTemplate> 
      </DataGridCheckBoxColumn.HeaderTemplate> 
     </DataGridCheckBoxColumn> 
     <DataGridTextColumn Binding="{Binding GivenName}" Header="Given Name" /> 
     ... 
     <DataGridTextColumn Binding="{Binding BranchName}" Header="Branch" /> 
    </DataGrid.Columns> 
</DataGrid> 

我更喜欢使用CheckBox的选择,因为它给了 - 我想 - 更清晰,更积极的用户反馈,选择了什么。

现在我的问题是,如果我点击一行,该行以蓝色突出显示,但在该行的项目中,IsSelected属性仍然是错误的。很明显,它没有被选中,因为复选框未被选中。

同样,如果我点击一个复选框,我必须点击两次,第一次选择该行作为“活动行”,第二次单击以选中复选框。然后,我可以再次单击该行,并且不再突出显示,但显然由于复选框被选中而选中该行。

这会在我的用户体验中产生某种不协调。我更喜欢单击一行不会突出显示它,但是当我选中它的复选框时,它会变为高亮显示。

我可以做到这一点,以及如何?如果不是,在最坏的情况下,我想关闭DataGrid's自己的行选择,并没有突出显示的行,只有选中或未选中复选框。

+0

将它绑定到被选中的datagridrow。 – Nkosi

+0

@Nkosi,我不明白你的意思吗? “CheckBox”已经绑定到行内容的IsSelected属性,但我无处可查找如何绑定到行元素本身的“IsSelected”。 – ProfK

回答

0

在当前版本中,该复选框绑定到该行中对象的IsSelected属性。

这就是我说的绑定到DataGridRowIsSelected

<DataGrid x:Name="TheList" Grid.Row="1" ItemsSource="{Binding People}" SelectionMode="Extended" SelectionUnit="FullRow" AutoGenerateColumns="False" 
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType=DataGridRow}}"> 
      <DataGridCheckBoxColumn.HeaderTemplate> 
       <DataTemplate> 
        <CheckBox IsChecked="{Binding Path=DataContext.AllSelected, RelativeSource={RelativeSource AncestorType=DataGrid}}"></CheckBox> 
       </DataTemplate> 
      </DataGridCheckBoxColumn.HeaderTemplate> 
     </DataGridCheckBoxColumn> 
     <DataGridTextColumn Binding="{Binding GivenName}" Header="Given Name" /> 
     ... 
     <DataGridTextColumn Binding="{Binding BranchName}" Header="Branch" /> 
    </DataGrid.Columns> 
</DataGrid> 
相关问题