Your problem is that you’re calling the wrong method for generating the name attribute. It should be $this->get_field_name('via_cat')
Also, you can use wp_dropdown_categories()
, no need to reinvent the wheel:
wp_dropdown_categories(array(
'name' => $this->get_field_name('via_cat'),
'selected' => (int)$instance['via_cat'],
));