我尝试在custon OnRender
中被覆盖的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次调用(或第一个操作是什么),而在绑定数据更改后又调用了3或2次。
我知道抽签仅在第4次迭代中成功发生。我不知道为什么,并添加了第4次迭代条件的计数器。很好。
当我尝试重绘时,OnRender
仅收到3次呼叫,有时收到2次。因此,绘制条件不起作用,即使我针对这种情况进行了更改,数据也尚未绘制。
我的哪些动作会触发OnRender
方法?为什么在尝试刷新数据时绘制在最后一次调用OnLoad
上成功,却没有偶然发生(或不可见)?