I think you need a pair of SPI.transfers for each digit:
digitalWrite(ssPin, LOW);
SPI.transfer(0);
SPI.transfer(0b00001111);
digitalWrite (ssPin, HIGH);
That's what works for me anyway.
Yes, the data stays displayed until you change it. You can do stuff and set a flag,
check the state of the flag each pass thru loop and send the data if something changed.
Or make the update a function that you call only when something has changed.