My problem is column row is not getting selected/highlighted on window when user presses any letter key on Keyboard.
I tried following code but when I use DataGridTextSearchBehaviour then SelectionChanged="DataGrid_SelectionChanged" is not working.
<DataGrid ItemsSource="{Binding DrugItems}" SelectedItem="{Binding SelectedDrugItem}"
SelectionChanged="DataGrid_SelectionChanged" Grid.Row="1" Grid.RowSpan="2" Grid.Column="0"
Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Visible">
<i:Interaction.Behaviors>
<b:DataGridTextSearchBehavior />
</i:Interaction.Behaviors>
<DataGrid.Columns>
<DataGridTextColumn Header="{DynamicResource lang.ui.DrugName}" Binding="{Binding Brand_Name}" Width="Auto"
ElementStyle="{StaticResource verticalCenter}">
</DataGridTextColumn>
<DataGridTextColumn Header="{DynamicResource lang.ui.DoseForm}" Binding="{Binding Dose_Form}"
ElementStyle="{StaticResource verticalCenter}"/>
<DataGridTextColumn Header="{DynamicResource lang.ui.UOM}" Binding="{Binding UOM}"
ElementStyle="{StaticResource verticalCenter}"/>
</DataGrid.Columns>
</DataGrid>
I have created DataGridTextSearchBehavior this seperate class ,and if I set AssociatedObject.SelectionUnit = DataGridSelectionUnit.FullRow; then problem gets resolved but instead of selecting column full row gets selected which I dont need. I need to select/Highlight column wise data.
using System;
using System.Linq;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Interactivity;
namespace eIVFRes.Behaviors
{
public class DataGridTextSearchBehavior : Behavior<DataGrid>
{
private DataGridSelectionUnit _oldUnit;
public string TextPath
{
get => TextSearch.GetTextPath(AssociatedObject);
set => TextSearch.SetTextPath(AssociatedObject, value ?? string.Empty);
}
protected override void OnAttached()
{
// <Setter Property="IsTextSearchEnabled" Value="True" />
//<Setter Property="IsTextSearchCaseSensitive" Value="False" />
base.OnAttached();
AssociatedObject.IsTextSearchEnabled = true;
AssociatedObject.IsTextSearchCaseSensitive = false;
_oldUnit = AssociatedObject.SelectionUnit;
AssociatedObject.SelectionUnit = DataGridSelectionUnit.Cell;
AssociatedObject.SelectedCellsChanged += DataGrid_OnSelectedCellsChanged;
}
protected override void OnDetaching()
{
AssociatedObject.IsTextSearchEnabled = false;
AssociatedObject.SelectionUnit = _oldUnit;
AssociatedObject.SelectedCellsChanged -= DataGrid_OnSelectedCellsChanged;
base.OnDetaching();
}
private void DataGrid_OnSelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{column row is not getting selected/highlighted on window when user presses any letter key on Keyboard.
if (!ReferenceEquals(sender, AssociatedObject))
return;
if (!AssociatedObject.SelectedCells.Any())
return;
var c = AssociatedObject.SelectedCells.First();
if (!(c.Column is DataGridTextColumn ct))
return;
var path = (ct.Binding as Binding)?.Path.Path ?? string.Empty;
if (string.IsNullOrWhiteSpace(path))
{
if (!string.IsNullOrWhiteSpace(TextPath))
{
TextPath = string.Empty;
TextSearch.SetText(AssociatedObject, string.Empty);
}
}
else
{
if (!path.Equals(TextPath, StringComparison.CurrentCulture))
{
TextPath = path;
TextSearch.SetText(AssociatedObject, string.Empty);
}
}
}
}
}