0

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);
                }
            }
        }
    }
}
Stefan Wuebbe
  • 2,109
  • 5
  • 17
  • 28

0 Answers0