DataViewCustomRenderer.RenderText ignores selection state

dv1 is a DataViewListCtrl with TextColumn. Select any row in dv1 on the top. Selected texts are then rendered white.

dv2 is a DataViewListCtrl where the column renderer is MyRenderer. Select any row in dv2 on the bottom. Selected texts (marked with (*)) are then rendered black.

But they should have behave the same, as MyRenderer.Render() are basically transpiled from wxDataViewTextRenderer::Render().

Does anyone know where’s going wrong?

Thanks in advance.

import wx
import wx.dataview

class MyRenderer(wx.dataview.DataViewCustomRenderer):
    def __init__(self):
        super().__init__()
        self.text = None

    def SetValue(self, value):
        self.text = value
        return True

    def GetValue(self):
        return self.text

    def GetSize(self):
        return wx.DefaultSize

    def Render(self, cell, dc, state):
        text = self.text or ''
        if state & wx.dataview.DATAVIEW_CELL_SELECTED:
            text  += "(*)"
        self.RenderText(text, 0, cell, dc, state)
        return True


class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None)
        self.panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.dv1 = wx.dataview.DataViewListCtrl(self.panel)
        sizer.Add(self.dv1, wx.SizerFlags(1).Expand())
        self.dv2 = wx.dataview.DataViewListCtrl(self.panel)
        sizer.Add(self.dv2, wx.SizerFlags(1).Expand())
        self.panel.SetSizer(sizer)
        self.set_data1()
        self.set_data2()
        self.Layout()

    def set_data1(self):
        for i in range(3):
            self.dv1.AppendTextColumn(f"col{i}")
        for i in range(5):
            self.dv1.AppendItem(["x"] * 3)

    def set_data2(self):
        for i in range(3):
            self.dv2.AppendColumn(wx.dataview.DataViewColumn(f"col{i}", MyRenderer(), i))
        for i in range(5):
            self.dv2.AppendItem(["y"] * 3)
        

class MyApp(wx.App):
    def OnInit(self):
        self.frame = MyFrame()
        self.SetTopWindow(self.frame)
        self.frame.Show()
        # self.frame.set_data1()
        # self.frame.set_data2()
        return True


app = MyApp()
app.MainLoop()