def METHOD_NAME(self, data: Iterable[ListDataDict]) -> None:
    self.ids: Dict[str, int] = {}
    self.columns: Dict[str, Gtk.TreeViewColumn] = {}
    types = [row["type"] for row in data]
    self.liststore = Gtk.ListStore(*types)
    self.filter = self.liststore.filter_new()
    self.set_model(self.filter)
    for i, row in enumerate(data):
        self.ids[row["id"]] = i
        if "renderer" not in row:
            continue
        column = Gtk.TreeViewColumn()
        column.pack_start(row["renderer"], True)
        column.set_attributes(row["renderer"], **row["render_attrs"])
        if "view_props" in row:
            column.set_properties(**row["view_props"])
        if "celldata_func" in row:
            func, user_data = row["celldata_func"]
            column.set_cell_data_func(row["renderer"], func, user_data)
        self.columns[row["id"]] = column
        self.append_column(column)