我有多个选择的WPF数据网格(模型有属性IsSelected ...),它工作正常,但是当我启动程序时,我必须先点击表格,然后,多个选择工作。当我第一次点击表格时,它会选择光标下的项目(如果我按下了shift,它也会选择项目,但它不会做多个选择)。
我认为可能是因为datagrid没有聚焦,但是当我在加载的窗口上执行datagrid.Focus()时,它也不起作用。我该怎么办?
WPF DataGrid代码:
<DataGrid x:Name="datagrid" AutoGenerateColumns="False" Height="Auto" VerticalAlignment="Stretch" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="4" Margin="3"
CanUserAddRows="False" CanUserDeleteRows="False"
ItemsSource="{Binding Path=Items}" SelectedItem="{Binding Path=SelectedItem}" IsSynchronizedWithCurrentItem="True"
SelectedIndex="{Binding Path=SelectedIndex}" SelectionMode="Extended" SelectionUnit="FullRow" EnableColumnVirtualization="False" EnableRowVirtualization="False">
<DataGrid.Columns>
<DataGridTextColumn Header="{Binding CodebookUnitsUnitTable, Source={StaticResource Texts}}" Binding="{Binding Path=Unit}" Width="*" IsReadOnly="True"/>
<DataGridTextColumn Header="{Binding CodebookUnitsDescriptionTable, Source={StaticResource Texts}}" Binding="{Binding Path=Description}" Width="5*" IsReadOnly="True"/>
</DataGrid.Columns>
<DataGrid.CommandBindings>
<CommandBinding Command="SelectAll" Executed="CommandBinding_Executed"/>
</DataGrid.CommandBindings>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="{Binding CodebookContextMenuNewItem, Source={StaticResource Texts}}" Command="{Binding NewItemCommand}">
<MenuItem.Icon>
<myComponents:AutoGreyableImage Height="20" Margin="0,-1,0,0" Width="20" Source="../Icons/Small/INovySM.gif" Stretch="None" RenderOptions.BitmapScalingMode="NearestNeighbor" RenderOptions.EdgeMode="Aliased"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.InputBindings>
<KeyBinding Command="{Binding DeleteCommand}" Key="Delete"/>
</DataGrid.InputBindings>
</DataGrid>
答案 0 :(得分:0)
您需要将绑定移至SelectedItem
,因为这会为整个网格设置一个选定的项目。
您可以通过样式绑定到每个数据项的IsSelected
属性(假设您的viewmodel上的每个项目都有一个IsSelected属性 - MVVM):
<DataGrid.Resources>
<Style TargetType="DataGridRow">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</DataGrid.Resources>
答案 1 :(得分:0)
解决方案集中在第一行,而不仅仅是DataGrid。