点击行选择DataGrid中的一行

5

我有一个 DataGrid,我想通过选择行而不是单元格来更改选定的项目。如下图所示,当我在单元格外单击时,项目不会更新。

用户尝试在空白单元格上选择行的 GIF

<DataGrid x:Name="customerListBox" SelectedItem="{Binding SelectedCustomer, UpdateSourceTrigger=PropertyChanged}" SelectionMode="Single" IsReadOnly="True"  ItemsSource="{Binding Customers}"  Margin="10,57,10,10"  AlternationCount="2"  BorderThickness="1" SnapsToDevicePixels="True"  AutoGenerateColumns="False" BorderBrush="Black" Foreground="Black">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Id}" Header="Id"/>
        <DataGridTextColumn Binding="{Binding Name}"  Header="Name"/>
        <DataGridTextColumn Binding="{Binding Phone}"  Header="Phone"/>
        <DataGridTextColumn Binding="{Binding Email}" Header="Email"/>
    </DataGrid.Columns>
</DataGrid>

我可以做的是将最后一列的宽度设置为*。但是这会使标题居中,并在宽屏显示器上显示时显得杂乱无序。
<DataGridTextColumn Binding="{Binding Email}" Width="*" Header="Email"/>

Column when set to *

2个回答

4
我有解决这个问题的方法,只需在最后一列Width="*"后面添加一个虚拟空白列即可。

是的,那个方法可行,使用 @danieleSartori 的 SelectionUnit 让它看起来更整洁了。只是感觉有点 hacky 哈哈。 - Bish25
@Bish25 - FullRow 选择会选择所有行,如果你对其外观感到满意,那么他的解决方案更好。 - Daniel Tshuva

1
你试过这个吗?
customerListBox.SelectionUnit = DataGridSelectionUnit.FullRow;

您也可以使用

标签。
customerListBox.SelectionMode = DataGridSelectionMode.Extended;

如果需要允许多选

,请使用以下代码。

谢谢回复,我尝试了那个方法,但没有效果,我认为这是因为它没有分配列。只是想知道是否有解决方案,而不是自定义标题。 - Bish25
为什么?它们是默认值。 - Rudolf Dvoracek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接