Вы, по-видимому, в корне неправильно поняли, что можно выполнить и или выполнить команду.
Чтобы определить, могут ли пользователи выполнять команду, существует механизм, который запрашивает выполнение каждой команды, имеющейся в представлении.
Вы можете вызвать это в коде, используя CommandManager.InvalidateRequerySuggested ()
https://docs.microsoft.com/en-us/dotnet/api/system.windows.input.commandmanager.invalidaterequerysuggested?view=netframework-4.8#System_Windows_Input_CommandManager_InvalidateRequerySuggested
Это также возникает каждый раз, когда происходит то, что считается значимым взаимодействием пользователя с представлением.
Возвращает истину - команда может выполняться, и связанный элемент управления включен, или ложь, и команда не может быть выполнена - элемент управления отключен.
Это поведение, которое вы видите.
Каждый раз, когда пользователь нажимает кнопку, вводит текст, выбирает элемент со списком и т. Д., Тогда у каждой команды будет вызываться ее выполнение.
Не следует помещать в это окно сообщения. Это не просто старый метод, который вы можете переопределить. Он должен возвращать true или false, и любая логика, которую он вызывает, должна выполняться настолько быстро, насколько это возможно.
Вы уже показываете окно сообщения в команде. Я не понимаю, почему у вас есть этот код в canexecute, а canexecute должен возвращать bool. Я делаю c #, но разве это не функция в vb, а не sub?