Sorry, but your code makes absolutely no sense. Is this a toplevel VI? How are you running it? (don't use the "continuous run" button!)
You seem to read and write (in no particular order) from/to the "index vals" properties. Why? What are you trying to achieve? Since you don't know what occurs first, the result will be completely unpredictable. 😉
What is the purpose of SelStart[] and SelSize[]?
The "Model Number:Strings" property occurs in all cases, thus you only need one instance of it AFTER the case structure.
There is no before/after, thus there is no way to tell what got edited. You need a loop and an event structure or shift register to see what changed. (e.g. similar to what TonP already suggested. Personally I prefer "Not equal" instead of "XOR" for clarity, but it does ot really matter).
In any case, all array elements must contain the same strings in the menu ring. You can not select this on a "per element" basis. It is not possible to have different ring entries for different array elements.
Maybe you should tell us how the operator is supposed to use the VI and what you expect to happen. It might be easier to start from scratch. 🙂