Hi, nick_cam1980,
the fact is that you do not need to call Refresh() method to update graphic's attribute or geometry. Just set/modify them first, the new value will be return when query again the graphic.
The proper idea is to use data binding for your situation. Maintain a graphics collection as the graphicslayer's data source, so when the collection changing, no matter attributes or geometries, the graphicslayer will automatically reflect the changes, no need to call Refresh() method.