У меня есть сетка данных, из которой я могу удалить элементы. Удаление элемента означает, что он больше не отображается в dataGrid, но он все еще находится в DataSource.Как получить элемент после выбранного элемента в Wpf DataGrid на основе критериев?
Как я могу установить элемент (который будет виден в списке после удаления выбранного элемента) в соответствии с выбранными?
Мне нужно получить объект сам, потому что мне нужно проверить некоторые дополнительные критерии, но единственный способ, который я могу придумать, - это некоторые неприятные для циклов.
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>
Вы используете привязки данных для заполнения сетки данных и установить текущий выбранный элемент? Если это так, мы могли бы использовать xaml. В противном случае, почему бы не использовать .IndexOf() для текущих элементов перед удалением, выберите этот индекс после удаления? –
Да, я использую привязку данных, но 'AutoGenerateColumns =" False "' –