Поведение WPF Canvas OnRender - PullRequest
       3

Поведение WPF Canvas OnRender

0 голосов
/ 09 октября 2018

Я пытаюсь понять правильное поведение в переопределенном методе 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 ничья удалась и не произошла (или не видна) при попытке обновить данные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...