How to code Control changes?

I have a small DynamicModule that displays a slider for x and the result of evaluating a function f[x].
The following code works as desired:

DynamicModule[{f, x = 5},
 f[x_] := {x, Sqrt[x]};
 Column[{
   Slider[Dynamic@x, {0, 25, 1}],
   Dynamic@f[x]
   }]
 ]

Now I want to store the results of f[x] in two variables arg and val for later use.
The following code works, but it throws a Set::shape error during the assignment of the result, and the variables arg and val are not set.

DynamicModule[{f, x = 5, arg, val},
 f[x_] := {x, Sqrt[x]};
 Column[{
   Slider[Dynamic@x, {0, 25, 1}],
   {arg, val} = Dynamic@f[x],
   Row[{"{arg,val} = ", Dynamic@{arg, val}}]
   }]
 ]

The reason for the error is that Dynamic@f[x] is an object and not a list.

How can I fix this problem?
Perhaps with something like Dynamic[f[x], someFunction] instead of {arg,val}=Dynamic[f[x]], where someFunction assigns arg and val?

This variant seems to work:

DynamicModule[{f, x = 5, arg, val},
 f[x_] := {x, Sqrt[x]};
 Column[{Slider[Dynamic@x, {0, 25, 1}],
   Dynamic[{arg, val} = f[x]],
   Row[{"{arg,val} = ", Dynamic@{arg, val}}]}]]

Or using a multi argument Dynamic like this

DynamicModule[{f, x, arg, val},
 f[x_] := {x, Sqrt[x]};
 x = 0;
 {arg, val} = f[x];
 
 Column[
  {Slider[
    Dynamic[x,
     (
       x = #;
       {arg, val} = f[x]
       ) &
     ],
    {0, 25, 1}
    ],
   Row[{"{arg,val} = ", Dynamic@{arg, val}}]}]
 ]

This works. Thanks David.

This works. Thanks Gianluca.

(I think I tried this before. No idea why I thought it would not work).