Используется DataGrid
с возможностью множественного выбора.
Некоторые строки скрываются через триггер:
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Product.Id}" Value="0">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
Проблема в следующем.
К примеру в таблице 10 строк. Строки 2-9 скрыты. Я выбираю первую строку, зажимаю SHIFT и кликаю на последнюю строку. В итоге в свойство SelectedItems
попадают все строки.
Хотелось бы сделать какой-то триггер на подобие этого, но нельзя использовать одно и тоже свойства в качестве триггера и сеттера:
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True" />
<Condition Property="Visibility" Value="Collapsed" />
</MultiTrigger.Conditions>
<Setter Property="IsSelected" Value="False" />
</MultiTrigger>
Как поправить такое поведение?
Можно подписаться на событие SelectionChanged
, перебирать все строки, проверять их видимость и снимать выделение у скрытых строк.
Лучше пока ничего не придумал :)
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
foreach (object item in e.AddedItems)
{
int index = dataGrid.Items.IndexOf(item);
DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(index);
if (row.Visibility != Visibility.Visible)
{
row.IsSelected = false;
}
}
}
Есть метод Something я его запускаю 100500 раз, однако объект SystemWindows