c# - 如何根据条件在 Wpf DataGrid 中的选定项目后获取项目?

标签 c# wpf datagrid

我有一个数据网格,我可以从中删除项目。删除一个项目意味着它在 dataGrid 上不再可见,但它仍在 DataSource 中。

如何将项目(在我删除当前选定的项目后将在列表中可见)设置为选中?

我需要获取对象本身,因为我必须检查一些额外的条件,但我能想到的唯一方法是一些讨厌的 for 循环。

private void OnTakeOneClick(object sender, RoutedEventArgs e)
{
    var tableSelectedItem = (PartialPaymentDTO)this.TableDataGrid.SelectedItem;
    // var nextItemInGrid = ???

    Model.TakeOrderItemsFromTable(tableSelectedItem);

    if(tableSelectedItem.QuantityOnTable != 0)
    {
        this.TableDataGrid.SelectedItem = tableSelectedItem;
    }
    else
    {
        // select next item in data grid that based on some extra criteria
    }
}

编辑:在选定项目之后获取整个项目列表也非常有帮助。

请注意,我不会从我的数据源中删除项目。相反,我根据标准将它们隐藏在网格中。

WPF:

<DataGrid ItemsSource="{Binding TableItems}" Name="TableDataGrid"  AutoGenerateColumns="False" 
          SelectionChanged ="OnTableDataGridSelected" HeadersVisibility="Column" BorderThickness="0"  SelectionMode="Single">
    <DataGrid.ItemContainerStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <DataTrigger Binding="{Binding QuantityOnTable}"  Value="0">
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.ItemContainerStyle>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Artikl" Binding="{Binding OrderItemName}" IsReadOnly="True" Width="*">
            <DataGridTextColumn.ElementStyle>
                <Style TargetType="{x:Type TextBlock}">
                    <Setter Property="TextAlignment" Value="Left"/>
                    <Setter Property="Padding" Value="0,6"/>
                    <Setter Property="TextWrapping" Value="NoWrap"/>
                </Style>
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

最佳答案

如果您想在 DataGridItems 集合中选择 tableSelectedItem 之后的项目,请试试这个:

var tableSelectedItem = (PartialPaymentDTO)this.TableDataGrid.SelectedItem;
int indexOfSelectedItem = this.TableDataGrid.Items.IndexOf(tableSelectedItem);
int indexOfNextItem = indexOfSelectedItem + 1;
if (this.TableDataGrid.Items.Count > indexOfNextItem)
    this.TableDataGrid.SelectedItem = this.TableDataGrid.Items[indexOfNextItem];

关于c# - 如何根据条件在 Wpf DataGrid 中的选定项目后获取项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42395687/

相关文章:

c# - DateTime.UtcNow 应该有时区偏移量吗?

c# - 使用 IDataErrorInfo 验证整个对象

c# - WPF 图表工具包。将图例内容绑定(bind)到 ColumnSeries ViewModel

c# - 如何用空行填充数据网格

c# - 使用可为空属性过滤嵌套列表

c# - MVC 下拉列表只读不起作用

.net - 如何在 ClickOnce 应用程序中部署修补程序?

c# - 缓慢的 WPF 4 数据网格刷新

wpf - 将 ComboBoxColumn 绑定(bind)到 WPF DataGrid 中 DataGrid 的 ItemsSource 的集合

c# - 在单个 Web API 方法上弃用多个路由中的特定路由