Такая проблема: необходимо осуществить поиск по выделенному тексту, допустим, пользователь выделяет часть текста в ячейке и необходимо вывести только те записи, в которых присутствует эта часть текста (точнее в столбце, где и выделялась часть текста). Data grid хранит простенькие объекты с 5 полями. Всё столбцы типа textcolumn.
Даже не знаю как получить выделенный текст из ячейки
Получить выделенный текст из ячейки можно, например, следующим образом: подпишитесь на PreparingCellForEdit, и там:
private void OnPreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
if (e.EditingElement is TextBox textBox)
{
textBox.SelectionChanged += OnSelectionChanged;
}
}
В CellEditEnding надо отписать от события:
private void OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (e.EditingElement is TextBox textBox)
{
textBox.SelectionChanged -= OnSelectionChanged;
}
}
Здесь OnSelectionChanged — метод:
private void OnSelectionChanged(object sender, RoutedEventArgs e)
{
var textBox = (TextBox)sender;
PatternTextBox.Text = textBox.SelectedText;
}
Разметка:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="PatternTextBox"
Text="{Binding Pattern, UpdateSourceTrigger=PropertyChanged}"/>
<Button Grid.Column="1" Content="Search"
Command="{Binding SearchCommand}"/>
<DataGrid x:Name="MyDataGrid" Grid.Row="1" Grid.ColumnSpan="2"
ItemsSource="{Binding Items}"
PreparingCellForEdit="OnPreparingCellForEdit"
CellEditEnding="OnCellEditEnding"/>
</Grid>
Фильтрацию коллекции Items реализуете в команде SearchCommand по тексту в свойстве Pattern в вашей VM.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей