You should emit dataChanged whenever the data of existing items change and layoutChanged whenever you add or remove items (or reorder them).