如何在app.xaml中将datagrid的SelectedIndex设置为-1

3

我在一个 WPF 窗口中有多个 DataGrid,而且在代码后台中使用了 SelectedIndex 属性,并将每个 DataGrid 的值设为 -1。

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    dgPackaging.ItemsSource = vm.getPackaging();
    dgUsers.ItemsSource = vm.getUsers();
    dgFarmers.ItemsSource = vm.getAllFarmers();
    dgProducts.ItemsSource = vm.getAllProducts();
    dgPurchaseOrder.ItemsSource = vm.getAllPurchasOrders();
    dgPODescription.ItemsSource = vm.PurchaseOrderDetails;
    dgCustomers.ItemsSource = vm.getAllCustomers();

    dgFarmers.SelectedIndex = -1;
    dgUsers.SelectedIndex = -1;
    dgPackaging.SelectedIndex = -1;
    dgProducts.SelectedIndex = -1;
    dgPurchaseOrder.SelectedIndex = -1;
    dgCustomers.SelectedIndex = -1;
} 

我在我的app.xaml文件中定义了一个样式,所有的数据表格都使用它:

<Style x:Key="AdminGridStyle" TargetType="DataGrid" BasedOn="{StaticResource dataGridStyle}">
    <Setter Property="Margin" Value="3"/>
    <Setter Property="RowHeight" Value="40"/>
    <Setter Property="IsSynchronizedWithCurrentItem" Value="true"/>
    <Setter Property="Grid.ColumnSpan" Value="2"/>
    <Setter Property="Grid.RowSpan" Value="8"/>
    <Setter Property="SelectedIndex" Value="-1"/>
</Style>

我可以将SelectedIndex属性值设置为大于或等于零的任何数字。 当我将属性值设置为-1时,Datagrid的第一行被选中。 所以我的问题是,是否可以在AdminGridStyle中将SelectedIndex属性设置为-1,如果可以,如何实现?


如果您不想选择任何项目,为什么不完全不设置SelectedIndex属性呢? - mm8
如果我从代码后端和App.xaml中删除SelectedIndex并运行程序,每个数据网格的第一行仍然会被选中。 - Tyron
如果您删除IsSynchronizedWithCurrentItem设置器会怎样? - mm8
@mm8 那个可行,谢谢! :) - Tyron
1个回答

2

如果您不想在DataGrid中选择任何项目,那么根本不需要设置SelectedIndex属性。

只需从您的Style中删除IsSynchronizedWithCurrentItem设置器即可:

<Style x:Key="AdminGridStyle" TargetType="DataGrid" BasedOn="{StaticResource dataGridStyle}">
    <Setter Property="Margin" Value="3"/>
    <Setter Property="RowHeight" Value="40"/>
    <Setter Property="Grid.ColumnSpan" Value="2"/>
    <Setter Property="Grid.RowSpan" Value="8"/>
    <Setter Property="SelectedIndex" Value="-1"/>
</Style>

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