Как подключить триггеры к 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