The problem here isn't with dynamic.
The first step in debugging any problem like this is to make the simplest possible example of it. Remove the inessential parts of the code.
Here is a simple example of your problem:
m = 2;
(* Why is the value always Null?*)
Dynamic[Switch[m,
1, Print["a"],
2, Print["b"]
]]
What does the following code do?
Switch[1,
1, Print["a"],
2, Print["b"]
]
The code prints the value "a" to the screen and returns Null. Please make sure you understand this. You want it to return the value "a" instead of printing it to the screen:
m = 2;
Dynamic[Switch[m,
1, "a"
2, "b"
]]