Я пытаюсь понять правильное поведение в переопределенном методе OnRender
в custon Canvas
.Я сталкиваюсь с магическим числом 4 и не могу найти его источник.
Пример моего переопределения ниже.Менеджеры типа m_<ManagerName>M
- это отдельные классы, которые выполняют логику рисования.
public class MyCanvas : Canvas {
...
int m_counter = 0;
protected override void OnRender(DrawingContext dc)
{
m_counter++;
if (m_counter == 4 && Leasings != null)
{
m_counter = 0;
ClearManagers();
if (m_gridM != null)
{
var rowsI = Leasings.Select(l => l.RowIndex).Distinct();
foreach (var i in rowsI)
m_gridM.DrawRow(i, dc);
m_gridM.DrawColumns(DayCount, dc);
}
if (m_barM != null)
{
foreach (var bm in Leasings)
{
m_barM.DrawBar(bm, dc);
}
}
if (m_textM != null)
{
m_textM.Load(Leasings);
m_textM.DrawText(dc);
}
}
base.OnRender(dc);
}
...
}
Проблема в том, что я не могу понять, почему этот метод вызывается 4-й раз подряд при загрузке окна (или что первыйaction is) и 3 или 2 раза, когда связанные данные были изменены.
Я получил, что ничья успешно произошла только на 4-й итерации.Я не знаю почему и добавил счетчик с условием для 4-й итерации.Работает нормально.
Когда я пытался перерисовать, я получил только 3, а иногда и 2 звонка OnRender
.Таким образом, условие для рисования не работает, и даже если я изменю его для этого случая, данные не будут нарисованы.
Какие мои действия вызывают метод OnRender
?Почему при последнем вызове OnLoad
ничья удалась и не произошла (или не видна) при попытке обновить данные?