Ваша команда находится в пользовательском контроле, в то время как кнопка находится в главном окне.
Который, по-видимому, содержит ваш пользовательский контроль.
Как события пузырьков и маршрутизации (которые используются для их управления).
Выполняется, ищет команду, восходящую к визуальному дереву до привязки.
PreviewExecuted ищет команду туннелирования ВНИЗ, визуальное дерево к привязке.
Поскольку ваша кнопка находится вродительский элемент usercontrol. Я не уверен, будет ли работать пузыри или туннелирование.
Но туннелирование будет PreviewExecuted и PreviewCanExecute.
https://docs.microsoft.com/en-us/dotnet/api/system.windows.input.commandbinding.previewexecuted?view=netframework-4.8
https://docs.microsoft.com/en-us/dotnet/api/system.windows.input.commandbinding.previewcanexecute?view=netframework-4.8
Команды с маршрутизацией могут быть довольно сложными для получения правильного результата.
Одна вещь, которую вам иногда нужно сделать, это связать commandtarget, чтобы указать, куда искать.
Например:
<Grid>
<local:UserControl1 x:Name="UC1" Height="60" Width="100"/>
<Button Content="Foo" TextElement.FontSize="30" Command="{x:Static local:UserControl1.Foo}"
CommandTarget="{Binding ElementName=UC1}"
/>
</Grid>
Работает для меня.
Я редко нахожу их полезными - это один из аспектов, который делает их менее полезными, чем вы можете себе представить.