ListDataProvider wraps a list collection. It allows you to modify the wrapped collection and to automatically propagate those changes to the UI.
If you do not use the ListDataProvider (and just call setRowData()) directly, then you will need to call setRowData() whenever you make changes to your list.
So basically, if you intend on modifying the list (adding/deleting) after it is rendered, use the ListDataProvider.
If you are just setting the list data to show it, then just use setRowData()