Как подключить триггеры к DataTemplate в коде?

У меня есть ListView, который заполняется из кода (т.к. число столбцов изначально неизвестно). Заполняется список подобным образом:

private void FillListView(DataTable table)
{
    GridView grid = (GridView)lvMain.View;

    // Create data triggers
    var mouseOverTrigger = new DataTrigger();
    mouseOverTrigger.Binding = new Binding() { Path = new PropertyPath("IsMouseOver") };
    mouseOverTrigger.Value = true;
    mouseOverTrigger.Setters.Add(new Setter(Border.BackgroundProperty, Colors.Blue));

    var mouseNotOverTrigger = new DataTrigger();
    mouseNotOverTrigger.Binding = new Binding() { Path = new PropertyPath("IsMouseOver") };
    mouseNotOverTrigger.Value = false;
    mouseNotOverTrigger.Setters.Add(new Setter(Border.BackgroundProperty, Colors.White));

    foreach (DataColumn col in table.Columns)
    {

        var gridColumn = new GridViewColumn()
        {
            Header = col.ColumnName,
            DisplayMemberBinding = new Binding(col.ColumnName)
        };

        gridColumn.CellTemplate = new DataTemplate();
        gridColumn.CellTemplate.Triggers.Add(mouseOverTrigger);
        gridColumn.CellTemplate.Triggers.Add(mouseNotOverTrigger);

        grid.Columns.Add(gridColumn);
    }
    lvMain.ItemsSource = ((IListSource)table).GetList();
}

Триггеры не срабатывают. Как можно заставить ячейки отзываться на появление над ней курсора? Триггеры не принципиальны, но ничего проще я пока не нашёл.


Ответы (1 шт):

Автор решения: Arli Chokoev

Проблема не в триггерах, а в свойстве DisplayMemberBinding, которое стоит по приоритету выше, чем DataTemplate: https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.gridviewcolumn.displaymemberbinding?view=netframework-4.8

→ Ссылка